From 9bdf50f3a6e35bc2a095e48838587e7dce7ef988 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:05:57 -0700 Subject: [PATCH 01/37] upcoming: [M3-7753] - Tag custom analytics events for account switching (#10190) * Tag switch account and session expiry dialog buttons with custom events * Added changeset: Tag custom analytics events for account switching * Rename event function, category because it might have been misleading --- ...r-10190-upcoming-features-1707847452121.md | 5 +++ .../src/features/Account/AccountLanding.tsx | 8 ++++- .../features/Account/SwitchAccountDrawer.tsx | 6 +++- .../SwitchAccountSessionDialog.tsx | 19 ++++++++++-- .../features/TopMenu/UserMenu/UserMenu.tsx | 6 +++- packages/manager/src/utilities/analytics.ts | 31 +++++++++++++++++++ 6 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md diff --git a/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md b/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md new file mode 100644 index 00000000000..ab62abd7f6f --- /dev/null +++ b/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Tag custom analytics events for account switching ([#10190](https://github.com/linode/manager/pull/10190)) diff --git a/packages/manager/src/features/Account/AccountLanding.tsx b/packages/manager/src/features/Account/AccountLanding.tsx index 56f49f06fcf..22f26737899 100644 --- a/packages/manager/src/features/Account/AccountLanding.tsx +++ b/packages/manager/src/features/Account/AccountLanding.tsx @@ -16,6 +16,7 @@ import { useParentTokenManagement } from 'src/features/Account/SwitchAccounts/us import { useFlags } from 'src/hooks/useFlags'; import { useAccount } from 'src/queries/account'; import { useGrants, useProfile } from 'src/queries/profile'; +import { sendSwitchAccountEvent } from 'src/utilities/analytics'; import AccountLogins from './AccountLogins'; import { SwitchAccountButton } from './SwitchAccountButton'; @@ -152,7 +153,12 @@ const AccountLanding = () => { } landingHeaderProps.disabledCreateButton = readOnlyAccountAccess; landingHeaderProps.extraActions = canSwitchBetweenParentOrProxyAccount ? ( - + { + sendSwitchAccountEvent('Account Landing'); + handleAccountSwitch(); + }} + /> ) : undefined; } diff --git a/packages/manager/src/features/Account/SwitchAccountDrawer.tsx b/packages/manager/src/features/Account/SwitchAccountDrawer.tsx index 33ad7f6eeea..3391402a690 100644 --- a/packages/manager/src/features/Account/SwitchAccountDrawer.tsx +++ b/packages/manager/src/features/Account/SwitchAccountDrawer.tsx @@ -13,6 +13,7 @@ import { updateCurrentTokenBasedOnUserType, } from 'src/features/Account/utils'; import { useCurrentToken } from 'src/hooks/useAuthentication'; +import { sendSwitchToParentAccountEvent } from 'src/utilities/analytics'; import { getStorage } from 'src/utilities/storage'; import { ChildAccountList } from './SwitchAccounts/ChildAccountList'; @@ -187,8 +188,11 @@ export const SwitchAccountDrawer = (props: Props) => { <> {' or '} { + sendSwitchToParentAccountEvent(); + handleSwitchToParentAccount(); + }} aria-label="parent-account-link" - onClick={handleSwitchToParentAccount} > switch back to your account diff --git a/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx b/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx index c4c4dfdaaa4..baca7927f68 100644 --- a/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx +++ b/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx @@ -4,6 +4,7 @@ import { useHistory } from 'react-router-dom'; import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel'; import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog'; import { Typography } from 'src/components/Typography'; +import { sendSwitchAccountSessionExpiryEvent } from 'src/utilities/analytics'; export const SwitchAccountSessionDialog = React.memo( ({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) => { @@ -13,18 +14,30 @@ export const SwitchAccountSessionDialog = React.memo( history.push('/logout'), + onClick: () => { + sendSwitchAccountSessionExpiryEvent('Log In'); + history.push('/logout'); + }, + }} + secondaryButtonProps={{ + label: 'Close', + onClick: () => { + sendSwitchAccountSessionExpiryEvent('Close'); + onClose(); + }, }} - secondaryButtonProps={{ label: 'Close', onClick: onClose }} /> ); return ( { + sendSwitchAccountSessionExpiryEvent('Close'); + onClose(); + }} actions={actions} data-testid="switch-account-session-dialog" maxWidth="xs" - onClose={onClose} open={isOpen} title="Session expired" > diff --git a/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx b/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx index 30908821028..57c561f5242 100644 --- a/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx +++ b/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx @@ -23,6 +23,7 @@ import { useParentTokenManagement } from 'src/features/Account/SwitchAccounts/us import { useFlags } from 'src/hooks/useFlags'; import { useAccount } from 'src/queries/account'; import { useGrants, useProfile } from 'src/queries/profile'; +import { sendSwitchAccountEvent } from 'src/utilities/analytics'; import { getStorage } from 'src/utilities/storage'; interface MenuLink { @@ -272,8 +273,11 @@ export const UserMenu = React.memo(() => { {canSwitchBetweenParentOrProxyAccount && ( { + sendSwitchAccountEvent('User Menu'); + handleAccountSwitch(); + }} buttonType="outlined" - onClick={handleAccountSwitch} /> )} diff --git a/packages/manager/src/utilities/analytics.ts b/packages/manager/src/utilities/analytics.ts index cb1b0bebd4b..46dd075e53f 100644 --- a/packages/manager/src/utilities/analytics.ts +++ b/packages/manager/src/utilities/analytics.ts @@ -435,6 +435,37 @@ export const sendLinodeConfigurationDocsEvent = (label: string) => { }); }; +// AccountLanding.tsx +// UserMenu.tsx +export const sendSwitchAccountEvent = ( + label: 'Account Landing' | 'User Menu' +) => { + sendEvent({ + action: 'Click:button', + category: 'Switch Accounts Flow', + label, + }); +}; + +// SwitchAccountDrawer.tsx +export const sendSwitchToParentAccountEvent = () => { + sendEvent({ + action: 'Click:link button', + category: 'Switch Accounts Flow - To Parent Account', + }); +}; + +// SwitchAccountSessionDialog.tsx +export const sendSwitchAccountSessionExpiryEvent = ( + label: 'Close' | 'Log In' +) => { + sendEvent({ + action: 'Click:button', + category: 'Switch Accounts Flow - Session Expiration', + label, + }); +}; + // LinodeDetailHeader.tsx export const sendEditBreadcrumbEvent = () => { sendEvent({ From a099b8ef2b0c626894fd6414a098f7ef6d158ecc Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:59:16 -0500 Subject: [PATCH 02/37] refactor: [M3-7585] - Upgrade to React 18 (#10169) * update react packages and regenerate lockfile * fix errors * update luxon and fix breaking changes * update luxon and fix breaking changes * remove `chartjs-adapter-luxon` * Added changeset: Update Luxon * use exact versions * fix all non-luxon errors * remove `jest-axe` * fixing unit tests * clean up action menu testing * fix tests * fix more tests * fix eslint errors * remove unneeded yarn resolution * Revert "remove unneeded yarn resolution" This reverts commit 2f76b847d2fc869badaa96cd5885fc0e86d66d37. * fix unit test flake * try to get cypress to install * readd resolution * fix cypress version * fix image tests * attempt to fix all cypress tests * remove `.only`s * Revert "attempt to fix all cypress tests" This reverts commit 12da589bede765e9954e3ffaf28fedf7c07dc600. * actually fix e2e tests failures * Added changeset: Update to React 18 * update hook --------- Co-authored-by: Banks Nussman --- package.json | 4 +- .../pr-10169-tech-stories-1707760967410.md | 5 + packages/manager/cypress/support/ui/select.ts | 3 + packages/manager/package.json | 19 +- .../AccessPanel/UserSSHKeyPanel.test.tsx | 2 +- .../AccountActivationError.tsx | 2 +- .../ActionsPanel/ActionsPanel.test.tsx | 8 +- .../src/components/AreaChart/AreaChart.tsx | 6 +- .../components/Autocomplete/Autocomplete.tsx | 1 + .../DebouncedSearchTextfield.test.tsx | 19 +- .../EditableText/EditableText.test.tsx | 4 +- .../EnhancedNumberInput.test.tsx | 2 - .../EnhancedSelect/__mocks__/Select.tsx | 1 - packages/manager/src/components/Link.test.tsx | 4 +- .../PaymentMethodRow.test.tsx | 22 +- .../components/PrimaryNav/SideMenu.test.tsx | 1 - .../SingleTextFieldForm.test.tsx | 8 +- .../src/components/TagCell/TagCell.tsx | 2 +- .../components/TagsPanel/TagsPanel.test.tsx | 5 +- .../TextTooltip/TextTooltip.test.tsx | 6 +- .../Uploaders/ImageUploader/ImageUploader.tsx | 7 +- .../VerticalLinearStepper.test.tsx | 17 +- .../src/containers/images.container.tsx | 13 +- packages/manager/src/dev-tools/dev-tools.tsx | 10 +- .../src/features/Account/AutoBackups.test.tsx | 56 - .../features/Account/CloseAccountDialog.tsx | 2 +- .../Account/SwitchAccountButton.test.tsx | 4 +- .../useParentTokenManagement.test.tsx | 2 +- .../src/features/Backups/AutoEnroll.test.tsx | 4 +- .../BillingSummary/BillingSummary.test.tsx | 4 +- .../PaymentBits/CreditCardDialog.tsx | 45 +- .../PaymentDrawer/PaymentDrawer.test.tsx | 8 +- .../PaymentDrawer/PaymentDrawer.tsx | 4 +- .../PaymentInfoPanel/PayPalErrorBoundary.tsx | 1 + .../CancelLanding/CancelLanding.test.tsx | 1 - .../DatabaseBackups/DatabaseBackups.test.tsx | 22 +- .../Domains/DomainActionMenu.test.tsx | 16 +- .../Rules/FirewallRuleActionMenu.test.tsx | 18 +- .../Rules/FirewallRuleDrawer.test.tsx | 11 +- .../CreateFirewallDrawer.test.tsx | 8 +- .../src/features/Help/StatusBanners.test.tsx | 4 +- .../ClusterList/ClusterActionMenu.test.tsx | 19 +- .../src/features/Linodes/AccessTable.test.tsx | 2 +- .../LinodeSelect/LinodeSelect.test.tsx | 12 +- .../ApiAwarenessModal.test.tsx | 4 +- .../Linodes/LinodesCreate/LinodeCreate.tsx | 2 +- .../LinodesCreate/LinodeCreateContainer.tsx | 6 +- .../LinodeBackup/CaptureSnapshot.test.tsx | 4 +- .../LinodeIPAddressRow.test.tsx | 4 +- .../LinodeSettingsLabelPanel.test.tsx | 2 +- .../Linodes/LinodesDetail/LinodesDetail.tsx | 13 +- .../LinodesLanding/LinodeActionMenu.test.tsx | 115 +- .../LinodeRow/LinodeRow.test.tsx | 4 +- .../AddRouteDrawer.test.tsx | 4 +- .../EditRouteDrawer.test.tsx | 4 +- .../LoadBalancerConfiguration.test.tsx | 24 +- .../ConfigurationAccordion.test.tsx | 8 +- .../ConfigurationAccordionHeader.test.tsx | 4 +- .../EditRoutes/EditRouteDrawer.test.tsx | 8 +- .../EditRoutes/RouteAccordionHeader.test.tsx | 4 +- .../LoadBalancerCreate/Routes.test.tsx | 6 +- .../ServiceTargets.test.tsx | 2 +- .../CreateCertificateDrawer.test.tsx | 12 +- .../EditCertificateDrawer.test.tsx | 16 +- .../Routes/EditRouteDrawer.tsx | 4 +- .../ServiceTargets/EndpointTable.test.tsx | 3 +- .../LongviewLanding/LongviewPlans.test.tsx | 7 +- .../Monitors/MonitorActionMenu.test.tsx | 44 +- .../SSHAccess/SSHAccessActionMenu.test.tsx | 28 +- .../NodeBalancers/NodeBalancerSelect.test.tsx | 12 +- .../NotificationSection.tsx | 12 +- .../AccessKeyLanding/HostNamesDrawer.test.tsx | 4 +- .../BucketLanding/BucketLanding.test.tsx | 80 +- .../BucketLanding/CreateBucketDrawer.test.tsx | 4 +- .../BucketLanding/OveragePricing.test.tsx | 4 +- .../EnableObjectStorageModal.test.tsx | 1 - .../APITokens/CreateAPITokenDrawer.test.tsx | 8 +- .../APITokens/EditAPITokenDrawer.test.tsx | 6 +- .../APITokens/RevokeTokenDialog.test.tsx | 6 +- .../AuthenticationSettings/TPADialog.test.tsx | 10 +- .../TPAProviders.test.tsx | 2 +- .../CreateOAuthClientDrawer.test.tsx | 18 +- .../SSHKeys/CreateSSHKeyDrawer.test.tsx | 18 +- .../SSHKeys/DeleteSSHKeyDialog.test.tsx | 10 +- .../StackScriptBase/StackScriptBase.tsx | 3 + .../StackScriptCreate/StackScriptCreate.tsx | 6 +- .../Support/TicketAttachmentList.test.tsx | 4 +- .../VPCs/VPCCreate/VPCCreate.test.tsx | 8 +- .../features/Volumes/VolumeTableRow.test.tsx | 12 +- .../Volumes/VolumesActionMenu.test.tsx | 80 +- .../manager/src/hooks/useAPIRequest.test.ts | 33 +- packages/manager/src/hooks/useAPIRequest.ts | 2 + .../manager/src/hooks/useOpenClose.test.ts | 2 +- packages/manager/src/hooks/useOrder.test.tsx | 50 +- packages/manager/src/hooks/useSet.test.ts | 2 +- packages/manager/src/index.tsx | 6 +- packages/manager/src/testSetup.ts | 12 +- packages/manager/src/utilities/link.test.tsx | 1 + .../manager/src/utilities/testHelpers.tsx | 84 +- yarn.lock | 6679 +++++++---------- 100 files changed, 3288 insertions(+), 4637 deletions(-) create mode 100644 packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md delete mode 100644 packages/manager/src/features/Account/AutoBackups.test.tsx diff --git a/package.json b/package.json index 9ed95835e54..73c02bf2854 100644 --- a/package.json +++ b/package.json @@ -58,11 +58,11 @@ "lodash": "^4.17.21", "glob-parent": "^5.1.2", "hosted-git-info": "^5.0.0", - "@types/react": "^17", "yaml": "^2.3.0", "word-wrap": "^1.2.4", "semver": "^7.5.2", - "tough-cookie": "^4.1.3" + "tough-cookie": "^4.1.3", + "jackspeak": "2.1.1" }, "workspaces": { "packages": [ diff --git a/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md b/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md new file mode 100644 index 00000000000..381f3f68f6a --- /dev/null +++ b/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Update to React 18 ([#10169](https://github.com/linode/manager/pull/10169)) diff --git a/packages/manager/cypress/support/ui/select.ts b/packages/manager/cypress/support/ui/select.ts index 6d117789272..d9aad65293d 100644 --- a/packages/manager/cypress/support/ui/select.ts +++ b/packages/manager/cypress/support/ui/select.ts @@ -25,6 +25,7 @@ export const select = { * @returns Cypress chainable. */ findItemById: (id: string) => { + // eslint-disable-next-line cypress/unsafe-to-chain-command return cy .get(`[data-qa-option="${id}"]`) .scrollIntoView() @@ -41,6 +42,7 @@ export const select = { * @returns Cypress chainable. */ findItemByText: (text: string) => { + // eslint-disable-next-line cypress/unsafe-to-chain-command return cy .get('[data-qa-option]') .contains(text) @@ -58,6 +60,7 @@ export const select = { * @returns Cypress chainable. */ findLinodeItemByText: (text: string) => { + // eslint-disable-next-line cypress/unsafe-to-chain-command return cy .get('[data-qa-linode-option]') .contains(text) diff --git a/packages/manager/package.json b/packages/manager/package.json index 9856aaecb0c..c18ee430367 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -49,10 +49,10 @@ "patch-package": "^7.0.0", "qrcode.react": "^0.8.0", "ramda": "~0.25.0", - "react": "^17.0.2", + "react": "^18.2.0", "react-beautiful-dnd": "^13.0.0", "react-csv": "^2.0.3", - "react-dom": "^17.0.2", + "react-dom": "^18.2.0", "react-dropzone": "~11.2.0", "react-number-format": "^3.5.0", "react-query": "^3.3.2", @@ -121,17 +121,15 @@ "@storybook/theming": "^7.6.10", "@swc/core": "^1.3.1", "@testing-library/cypress": "^10.0.0", - "@testing-library/jest-dom": "~5.11.3", - "@testing-library/react": "~10.4.9", - "@testing-library/react-hooks": "~3.4.1", - "@testing-library/user-event": "^12.1.1", + "@testing-library/jest-dom": "~6.4.2", + "@testing-library/react": "~14.2.1", + "@testing-library/user-event": "^14.5.2", "@types/braintree-web": "^3.75.23", "@types/chai-string": "^1.4.5", "@types/chart.js": "^2.9.21", "@types/css-mediaquery": "^0.1.1", "@types/he": "^1.1.0", "@types/highlight.js": "~10.1.0", - "@types/jest-axe": "^3.5.7", "@types/jsdom": "^21.1.4", "@types/jspdf": "^1.3.3", "@types/luxon": "3.4.2", @@ -141,10 +139,10 @@ "@types/node": "^12.7.1", "@types/qrcode.react": "^0.8.0", "@types/ramda": "0.25.16", - "@types/react": "^17.0.27", + "@types/react": "^18.2.55", "@types/react-beautiful-dnd": "^13.0.0", "@types/react-csv": "^1.1.3", - "@types/react-dom": "^17.0.9", + "@types/react-dom": "^18.2.18", "@types/react-redux": "~7.1.7", "@types/react-router-dom": "~5.3.3", "@types/react-router-hash-link": "^1.2.1", @@ -165,7 +163,7 @@ "chalk": "^5.2.0", "commander": "^6.2.1", "css-mediaquery": "^0.1.2", - "cypress": "^13.5.0", + "cypress": "13.5.0", "cypress-axe": "^1.0.0", "cypress-file-upload": "^5.0.7", "cypress-real-events": "^1.11.0", @@ -188,7 +186,6 @@ "eslint-plugin-xss": "^0.1.10", "factory.ts": "^0.5.1", "glob": "^10.3.1", - "jest-axe": "^8.0.0", "jsdom": "^22.1.0", "junit2json": "^3.1.4", "lint-staged": "^13.2.2", diff --git a/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx b/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx index b3b152ff10d..e0d163d76c0 100644 --- a/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx +++ b/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx @@ -111,7 +111,7 @@ describe('UserSSHKeyPanel', () => { expect(getByText('test-user')).toBeInTheDocument(); expect(getByText('ssh-key')).toBeInTheDocument(); }); - userEvent.click(getByRole('checkbox')); + await userEvent.click(getByRole('checkbox')); expect(props.setAuthorizedUsers).toBeCalledWith(['test-user']); }); }); diff --git a/packages/manager/src/components/AccountActivation/AccountActivationError.tsx b/packages/manager/src/components/AccountActivation/AccountActivationError.tsx index 5fff87e057f..ad56e0fcc4b 100644 --- a/packages/manager/src/components/AccountActivation/AccountActivationError.tsx +++ b/packages/manager/src/components/AccountActivation/AccountActivationError.tsx @@ -26,7 +26,7 @@ const AccountActivationError = (props: CombinedProps) => { {getAPIErrorOrDefault( props.errors, 'Your account is not yet activated. Please reach out to support@linode.com for more information' - )} + )[0].reason} ); }; diff --git a/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx b/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx index efb6a7c22f4..9cbc228dc1c 100644 --- a/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx +++ b/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx @@ -47,7 +47,7 @@ describe('ActionsPanel', () => { expect(screen.queryByTestId(secondaryButtonTestId)).not.toBeInTheDocument(); }); - it('should call primaryButtonHandler when primary button is clicked', () => { + it('should call primaryButtonHandler when primary button is clicked', async () => { const mockHandler = vi.fn(); renderWithTheme( { }} /> ); - userEvent.click(screen.getByTestId(primaryButtonTestId)); + await userEvent.click(screen.getByTestId(primaryButtonTestId)); expect(mockHandler).toHaveBeenCalledTimes(1); }); - it('should call secondaryButtonHandler when secondary button is clicked', () => { + it('should call secondaryButtonHandler when secondary button is clicked', async () => { const mockHandler = vi.fn(); renderWithTheme( { }} /> ); - userEvent.click(screen.getByTestId(secondaryButtonTestId)); + await userEvent.click(screen.getByTestId(secondaryButtonTestId)); expect(mockHandler).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/manager/src/components/AreaChart/AreaChart.tsx b/packages/manager/src/components/AreaChart/AreaChart.tsx index 7f2db46b8fa..a64ed6c25ed 100644 --- a/packages/manager/src/components/AreaChart/AreaChart.tsx +++ b/packages/manager/src/components/AreaChart/AreaChart.tsx @@ -173,11 +173,15 @@ export const AreaChart = (props: AreaChartProps) => { {value} )} + onClick={({ dataKey }) => { + if (dataKey) { + handleLegendClick(dataKey as string); + } + }} wrapperStyle={{ left: 25, }} iconType="square" - onClick={(props) => handleLegendClick(props.dataKey)} /> )} {showLegend && legendRows && ( diff --git a/packages/manager/src/components/Autocomplete/Autocomplete.tsx b/packages/manager/src/components/Autocomplete/Autocomplete.tsx index 013314d5235..3aa494f3c23 100644 --- a/packages/manager/src/components/Autocomplete/Autocomplete.tsx +++ b/packages/manager/src/components/Autocomplete/Autocomplete.tsx @@ -33,6 +33,7 @@ export interface EnhancedAutocompleteProps< noMarginTop?: boolean; /** Text to show when the Autocomplete search yields no results. */ noOptionsText?: string; + placeholder?: string; /** Label for the "select all" option. */ selectAllLabel?: string; textFieldProps?: Partial; diff --git a/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx b/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx index b3bc7b175de..fc430e82dd7 100644 --- a/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx +++ b/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx @@ -1,13 +1,11 @@ +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { debounce } from 'lodash'; import * as React from 'react'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { DebouncedSearchTextField } from './DebouncedSearchTextField'; -vi.useFakeTimers(); - const labelVal = 'Search textfield label'; const textfieldId = 'textfield-input'; const props = { @@ -45,20 +43,15 @@ describe('Debounced Search Text Field', () => { expect(circleIcon).toBeInTheDocument(); }); - it('calls isSearching', () => { - const debouncedOnSearch = debounce(props.onSearch, 250); + it('calls isSearching', async () => { const screen = renderWithTheme( - + ); const textfield = screen.getByTestId(textfieldId); - userEvent.type(textfield, 'test'); - vi.runAllTimers(); - expect(props.onSearch).toHaveBeenCalled(); + await userEvent.type(textfield, 'test'); + + await waitFor(() => expect(props.onSearch).toHaveBeenCalled()); }); it('renders the expected placeholder', () => { diff --git a/packages/manager/src/components/EditableText/EditableText.test.tsx b/packages/manager/src/components/EditableText/EditableText.test.tsx index 63f2dbe7062..589ab3d4c0b 100644 --- a/packages/manager/src/components/EditableText/EditableText.test.tsx +++ b/packages/manager/src/components/EditableText/EditableText.test.tsx @@ -86,7 +86,7 @@ describe('Editable Text', () => { expect(getByLabelText(BUTTON_LABEL)).toBeInTheDocument(); }); - it('calls onEdit if the text has been changed', () => { + it('calls onEdit if the text has been changed', async () => { const { getByLabelText, getByTestId } = renderWithTheme( ); @@ -101,7 +101,7 @@ describe('Editable Text', () => { // editing text const textfield = getByTestId('textfield-input'); expect(textfield).toHaveValue('Edit this'); - userEvent.type(textfield, ' has now been edited'); + await userEvent.type(textfield, ' has now been edited'); expect(textfield).toHaveValue('Edit this has now been edited'); // saving text diff --git a/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx b/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx index 84053d6927e..3e4162196a0 100644 --- a/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx +++ b/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx @@ -16,8 +16,6 @@ const disabledProps = { disabled: true, }; -beforeEach(vi.clearAllMocks); - describe('EnhancedNumberInput', () => { it("should increment the input's value by 1 when the plus button is clicked", () => { const { getByTestId } = render( diff --git a/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx b/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx index 9b215dfe4ba..590dc1ebd7f 100644 --- a/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx +++ b/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx @@ -50,7 +50,6 @@ export default ({ name={_label} onBlur={handleChange} onChange={handleChange} - placeholder={placeholder} value={value ?? ''} > {_options.map((thisOption: any) => ( diff --git a/packages/manager/src/components/Link.test.tsx b/packages/manager/src/components/Link.test.tsx index c9aa1d13b92..d977e1cb2aa 100644 --- a/packages/manager/src/components/Link.test.tsx +++ b/packages/manager/src/components/Link.test.tsx @@ -60,7 +60,7 @@ describe('Link component', () => { expect(linkElement).toHaveTextContent(/External Link/); }); - it('calls the onClick handler when the link is clicked', () => { + it('calls the onClick handler when the link is clicked', async () => { const mockOnClick = vi.fn(); const mockProps: LinkProps = { children: 'External Link', @@ -76,7 +76,7 @@ describe('Link component', () => { expect(linkElement.tagName).toBe('A'); expect(linkElement).toHaveTextContent(/External Link/); - userEvent.click(linkElement); + await userEvent.click(linkElement); expect(mockOnClick).toHaveBeenCalledTimes(1); }); diff --git a/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx b/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx index 486d083a4ac..438798296c8 100644 --- a/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx +++ b/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx @@ -111,7 +111,7 @@ describe('Payment Method Row', () => { expect(getByLabelText(expectedLabelPayPal)).toBeVisible(); }); - it('Disables "Make Default" and "Delete" actions if payment method is set as default', () => { + it('Disables "Make Default" and "Delete" actions if payment method is set as default', async () => { const { getByLabelText, getByText } = renderWithTheme( { /> ); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); expect( getByText('Make Default').closest('li')?.getAttribute('aria-disabled') ).toEqual('true'); @@ -129,7 +129,7 @@ describe('Payment Method Row', () => { ).toEqual('true'); }); - it('Calls `onDelete` callback when "Delete" action is clicked', () => { + it('Calls `onDelete` callback when "Delete" action is clicked', async () => { const mockFunction = vi.fn(); const { getByLabelText, getByText } = renderWithTheme( @@ -142,16 +142,16 @@ describe('Payment Method Row', () => { ); const actionMenu = getByLabelText('Action menu for card ending in 1881'); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const deleteActionButton = getByText('Delete'); expect(deleteActionButton).toBeVisible(); - userEvent.click(deleteActionButton); + await userEvent.click(deleteActionButton); expect(mockFunction).toBeCalledTimes(1); }); - it('Makes payment method default when "Make Default" action is clicked', () => { + it('Makes payment method default when "Make Default" action is clicked', async () => { const paymentMethod = paymentMethodFactory.build({ data: { card_type: 'Visa', @@ -167,16 +167,16 @@ describe('Payment Method Row', () => { ); const actionMenu = getByLabelText('Action menu for card ending in 1111'); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const makeDefaultButton = getByText('Make Default'); expect(makeDefaultButton).toBeVisible(); - userEvent.click(makeDefaultButton); + await userEvent.click(makeDefaultButton); expect(makeDefaultPaymentMethod).toBeCalledTimes(1); }); - it('Opens "Make a Payment" drawer if "Make a Payment" action is clicked', () => { + it('Opens "Make a Payment" drawer if "Make a Payment" action is clicked', async () => { const paymentMethod = paymentMethodFactory.build(); /* @@ -195,11 +195,11 @@ describe('Payment Method Row', () => { ); const actionMenu = getByLabelText('Action menu for card ending in 1881'); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const makePaymentButton = getByText('Make a Payment'); expect(makePaymentButton).toBeVisible(); - userEvent.click(makePaymentButton); + await userEvent.click(makePaymentButton); expect(getByTestId('drawer')).toBeVisible(); expect(getByTestId('drawer-title').textContent).toEqual('Make a Payment'); diff --git a/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx b/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx index f27ebd945d7..089201f2414 100644 --- a/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx +++ b/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom'; import { fireEvent, screen } from '@testing-library/react'; import React from 'react'; diff --git a/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx b/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx index bf3f19be53f..4a80c6e8d67 100644 --- a/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx +++ b/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx @@ -21,8 +21,8 @@ describe('SingleTextFieldForm', () => { it('Renders a success message on success', async () => { renderWithTheme(); - userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); - userEvent.click(screen.getByText('Update Username')); + await userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); + await userEvent.click(screen.getByText('Update Username')); await waitFor(() => expect(screen.getByText(/username updated/i)).toBeInTheDocument() ); @@ -37,8 +37,8 @@ describe('SingleTextFieldForm', () => { )} /> ); - userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); - userEvent.click(screen.getByText('Update Username')); + await userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); + await userEvent.click(screen.getByText('Update Username')); await waitFor(() => expect(screen.getByText(/error updating/i)).toBeInTheDocument() ); diff --git a/packages/manager/src/components/TagCell/TagCell.tsx b/packages/manager/src/components/TagCell/TagCell.tsx index 5e8393a5954..ced0fd1b51b 100644 --- a/packages/manager/src/components/TagCell/TagCell.tsx +++ b/packages/manager/src/components/TagCell/TagCell.tsx @@ -41,7 +41,7 @@ const TagCell = (props: TagCellProps) => { const [addingTag, setAddingTag] = React.useState(false); const [loading, setLoading] = React.useState(false); const overflowRef = React.useCallback( - (node) => { + (node: HTMLDivElement) => { if (node !== null) { setOverflow(checkOverflow(node)); } diff --git a/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx b/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx index 1c3f2b5b92c..0b572f63c9d 100644 --- a/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx +++ b/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx @@ -7,6 +7,7 @@ import { renderWithTheme } from 'src/utilities/testHelpers'; import { TagsPanel } from './TagsPanel'; import type { TagsPanelProps } from './TagsPanel'; +import userEvent from '@testing-library/user-event'; const queryClient = new QueryClient(); @@ -43,14 +44,14 @@ describe('TagsPanel', () => { ); - fireEvent.click(getByText('Add a tag')); + await userEvent.click(getByText('Add a tag')); fireEvent.change(getByLabelText('Create or Select a Tag'), { target: { value: 'NewTag' }, }); const newTagItem = getByText('Create "NewTag"'); - fireEvent.click(newTagItem); + await userEvent.click(newTagItem); await waitFor(() => { expect(updateTagsMock).toHaveBeenCalledWith(['NewTag', 'Tag1', 'Tag2']); diff --git a/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx b/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx index 56c86524ef7..7a44e14538e 100644 --- a/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx +++ b/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx @@ -16,12 +16,12 @@ describe('TextTooltip', () => { ); - expect(queryByRole(/tooltip/)).not.toBeInTheDocument(); + expect(queryByRole('tooltip')).not.toBeInTheDocument(); expect(getByText(props.displayText)).toBeInTheDocument(); fireEvent.mouseEnter(getByText(props.displayText)); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toBeInTheDocument(); }); @@ -37,7 +37,7 @@ describe('TextTooltip', () => { ); fireEvent.mouseEnter(getByText(props.displayText)); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toHaveAttribute('data-popper-placement', 'bottom'); }); diff --git a/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx b/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx index d4568ecb0f7..4dc9c18b7f5 100644 --- a/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx +++ b/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx @@ -1,6 +1,7 @@ import { APIError } from '@linode/api-v4/lib/types'; import { useSnackbar } from 'notistack'; import * as React from 'react'; +import { flushSync } from 'react-dom'; import { FileRejection, useDropzone } from 'react-dropzone'; import { useQueryClient } from 'react-query'; import { useDispatch } from 'react-redux'; @@ -216,7 +217,11 @@ export const ImageUploader = React.memo((props: ImageUploaderProps) => { variant: 'success', }); - dispatchAction(setPendingUpload(false)); + // React force a render so that `pendingUpload` is false when navigating away + // from the upload page. + flushSync(() => { + dispatchAction(setPendingUpload(false)); + }); recordImageAnalytics('success', file); diff --git a/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx b/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx index 729d6e8dec4..12cea4b6252 100644 --- a/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx +++ b/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom/extend-expect'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; @@ -34,9 +33,9 @@ describe('VerticalLinearStepper', () => { expect(screen.getByText('Next: Summary')).toBeInTheDocument(); expect(screen.queryByText('Previous: Details')).toBeNull(); }); - test('Should navigate to second step conent', () => { + test('Should navigate to second step conent', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('summary')); + await userEvent.click(screen.getByTestId('summary')); expect(steps[0].handler).toHaveBeenCalledTimes(1); expect(screen.getByText('Step 2 Content')).toBeInTheDocument(); expect(screen.queryByText('Step 1 Content')).toBeNull(); @@ -44,10 +43,10 @@ describe('VerticalLinearStepper', () => { expect(screen.getByText('Next: Next')).toBeInTheDocument(); expect(screen.queryByText('Previous: Summary')).toBeNull(); }); - test('Should navigate to final step conent', () => { + test('Should navigate to final step conent', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('summary')); - userEvent.click(screen.getByTestId('next')); + await userEvent.click(screen.getByTestId('summary')); + await userEvent.click(screen.getByTestId('next')); expect(steps[1].handler).toHaveBeenCalledTimes(1); expect(screen.queryByText('Step 1 Content')).toBeNull(); expect(screen.queryByText('Step 2 Content')).toBeNull(); @@ -55,10 +54,10 @@ describe('VerticalLinearStepper', () => { expect(screen.queryByText('Next: Summary')).toBeNull(); expect(screen.getByText('Previous: Summary')).toBeInTheDocument(); }); - test('Should be able to go previous step', () => { + test('Should be able to go previous step', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('summary')); - userEvent.click(screen.getByText('Previous: Details')); + await userEvent.click(screen.getByTestId('summary')); + await userEvent.click(screen.getByText('Previous: Details')); expect(steps[1].handler).toHaveBeenCalledTimes(1); expect(screen.getByText('Step 1 Content')).toBeInTheDocument(); }); diff --git a/packages/manager/src/containers/images.container.tsx b/packages/manager/src/containers/images.container.tsx index 75d173de4f2..c5711b488f6 100644 --- a/packages/manager/src/containers/images.container.tsx +++ b/packages/manager/src/containers/images.container.tsx @@ -5,7 +5,7 @@ import * as React from 'react'; import { listToItemsByID } from 'src/queries/base'; import { useAllImagesQuery } from 'src/queries/images'; -export interface DefaultProps { +export interface WithImagesProps { imagesData: Record; imagesError?: APIError[]; imagesLastUpdated: number; @@ -26,12 +26,9 @@ export interface DefaultProps { * best practice is to include an FC container above it (the routing level often works well) * and pass the data through there. */ -type Wrapper = ( - Component: React.ComponentType -) => React.FC; -const imagesContainer: Wrapper = ( - Component: React.ComponentType -) => (props) => { +export const withImages = ( + Component: React.ComponentType +) => (props: Props) => { const { data, dataUpdatedAt, error, isLoading } = useAllImagesQuery(); const _imagesData = listToItemsByID(data ?? []); @@ -45,5 +42,3 @@ const imagesContainer: Wrapper = ( /> ); }; - -export default imagesContainer; diff --git a/packages/manager/src/dev-tools/dev-tools.tsx b/packages/manager/src/dev-tools/dev-tools.tsx index d24f54ad37b..99ba883b528 100644 --- a/packages/manager/src/dev-tools/dev-tools.tsx +++ b/packages/manager/src/dev-tools/dev-tools.tsx @@ -1,15 +1,15 @@ import Grid from '@mui/material/Unstable_Grid2'; import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import { Provider } from 'react-redux'; import { ENABLE_DEV_TOOLS, isProductionBuild } from 'src/constants'; import { ApplicationStore } from 'src/store'; +import './dev-tools.css'; import { EnvironmentToggleTool } from './EnvironmentToggleTool'; import { FeatureFlagTool } from './FeatureFlagTool'; import { MockDataTool } from './MockDataTool'; -import './dev-tools.css'; function install(store: ApplicationStore) { function DevTools() { @@ -37,11 +37,11 @@ function install(store: ApplicationStore) { const devToolsRoot = document.createElement('div'); document.body.appendChild(devToolsRoot); - ReactDOM.render( + const root = createRoot(devToolsRoot); + root.render( - , - devToolsRoot + ); } diff --git a/packages/manager/src/features/Account/AutoBackups.test.tsx b/packages/manager/src/features/Account/AutoBackups.test.tsx deleted file mode 100644 index 4ec909af6d9..00000000000 --- a/packages/manager/src/features/Account/AutoBackups.test.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as jaxe from 'jest-axe'; -import * as React from 'react'; - -import { renderWithTheme, toPassAxeCheck } from 'src/utilities/testHelpers'; - -import AutoBackups from './AutoBackups'; - -const TEST_TIMEOUT = 10000; - -expect.extend(toPassAxeCheck); -expect.extend(jaxe.toHaveNoViolations); - -// expect.extend(jaxe.toHaveNoViolations); -describe('AutoBackups simple sanity check', () => { - it( - 'not managed not auto backups with linodes nobackups', - async () => { - const openDrawer = vi.fn(); - const props = { - backups_enabled: false, - hasLinodesWithoutBackups: true, - isManagedCustomer: false, - onChange: vi.fn(), - openBackupsDrawer: openDrawer, - }; - const res = renderWithTheme(); - expect(res).toPassAxeCheck(); - expect(await jaxe.axe(res.container)).toHaveNoViolations(); - }, - TEST_TIMEOUT - ); - - // it('should FAIL but does not', async () => { - // // pass anything that outputs html to axe - // const html = render(test) - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - - // }) - // it('should FAIL but does not', async () => { - // const html = render(test) - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - // }) - // it('should PASS', async () => { - // const html = render() - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - - // }) - // it('should FAIL', async () => { - // const html = render() - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - // }) -}); diff --git a/packages/manager/src/features/Account/CloseAccountDialog.tsx b/packages/manager/src/features/Account/CloseAccountDialog.tsx index c74d8009bb5..5ebca3b4297 100644 --- a/packages/manager/src/features/Account/CloseAccountDialog.tsx +++ b/packages/manager/src/features/Account/CloseAccountDialog.tsx @@ -60,7 +60,7 @@ const CloseAccountDialog = ({ closeDialog, open }: Props) => { }, [inputtedUsername, profile]); const inputRef = React.useCallback( - (node) => { + (node: any) => { /** * focus on first textfield when modal is opened */ diff --git a/packages/manager/src/features/Account/SwitchAccountButton.test.tsx b/packages/manager/src/features/Account/SwitchAccountButton.test.tsx index c991d2c2357..b043e9f825c 100644 --- a/packages/manager/src/features/Account/SwitchAccountButton.test.tsx +++ b/packages/manager/src/features/Account/SwitchAccountButton.test.tsx @@ -14,11 +14,11 @@ describe('SwitchAccountButton', () => { expect(screen.getByTestId('swap-icon')).toBeInTheDocument(); }); - test('calls onClick handler when button is clicked', () => { + test('calls onClick handler when button is clicked', async () => { const onClickMock = vi.fn(); renderWithTheme(); - userEvent.click(screen.getByText('Switch Account')); + await userEvent.click(screen.getByText('Switch Account')); expect(onClickMock).toHaveBeenCalledTimes(1); }); diff --git a/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx b/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx index 0715e3d02d5..3304c35029b 100644 --- a/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx +++ b/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx @@ -1,4 +1,4 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import * as React from 'react'; import { switchAccountSessionContext } from 'src/context/switchAccountSessionContext'; diff --git a/packages/manager/src/features/Backups/AutoEnroll.test.tsx b/packages/manager/src/features/Backups/AutoEnroll.test.tsx index 1c21b6d656b..2ca4004372a 100644 --- a/packages/manager/src/features/Backups/AutoEnroll.test.tsx +++ b/packages/manager/src/features/Backups/AutoEnroll.test.tsx @@ -18,12 +18,12 @@ describe('AutoEnroll display component', () => { ); expect(getByRole('checkbox')).toBeChecked(); }); - it('the toggle props works', () => { + it('the toggle props works', async () => { const toggle = vi.fn(); const { getByRole } = renderWithTheme( ); - userEvent.click(getByRole('checkbox')); + await userEvent.click(getByRole('checkbox')); expect(toggle).toBeCalled(); }); it('should render its error prop', () => { diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx index dc463dc6c12..b9605c9cbde 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx @@ -134,7 +134,7 @@ describe('BillingSummary', () => { within(screen.getByTestId('accrued-charges-value')).getByText('$5.00'); }); - it('opens "Make a Payment" drawer when "Make a payment." is clicked', () => { + it('opens "Make a Payment" drawer when "Make a payment." is clicked', async () => { const { getByTestId, getByText } = renderWithTheme( @@ -142,7 +142,7 @@ describe('BillingSummary', () => { ); const paymentButton = getByText('Make a payment', { exact: false }); - userEvent.click(paymentButton); + await userEvent.click(paymentButton); expect(getByTestId('drawer')).toBeVisible(); expect(getByTestId('drawer-title').textContent).toEqual('Make a Payment'); diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx index 6b5b54d5990..e07974e3fd3 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { compose } from 'recompose'; import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel'; import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog'; @@ -18,14 +17,26 @@ interface Props extends Actions { usd: string; } -type CombinedProps = Props; - -const CreditCardDialog: React.SFC = (props) => { - const { cancel, error, open, usd, ...actionsProps } = props; +export const CreditCardDialog = (props: Props) => { + const { cancel, error, open, usd, isMakingPayment, executePayment } = props; return ( } + actions={ + + } onClose={cancel} open={open} title="Confirm Payment" @@ -35,25 +46,3 @@ const CreditCardDialog: React.SFC = (props) => { ); }; - -export default compose(React.memo)(CreditCardDialog); - -class DialogActions extends React.PureComponent { - render() { - return ( - - ); - } -} diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx index a7ef1e2d320..6670bff1051 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx @@ -43,8 +43,8 @@ describe('Make a Payment Panel', () => { await waitForElementToBeRemoved(screen.getByTestId('loading-account')); - userEvent.click(screen.getByText(/pay now/i)); - userEvent.click(screen.getByTestId('credit-card-submit')); + await userEvent.click(screen.getByText(/pay now/i)); + await userEvent.click(screen.getByTestId('credit-card-submit')); expect( await screen.findByText(/your payment has been processed but/i) ).toBeInTheDocument(); @@ -57,8 +57,8 @@ describe('Make a Payment Panel', () => { }) ); render(wrapWithTheme()); - userEvent.click(screen.getByText(/pay via credit card/i)); - userEvent.click(screen.getByTestId('credit-card-submit')); + await userEvent.click(screen.getByText(/pay via credit card/i)); + await userEvent.click(screen.getByTestId('credit-card-submit')); expect( await screen.findByText(/submitted successfully/i) ).toBeInTheDocument(); diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx index 20c21f35058..ee55de5fd8a 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx @@ -22,15 +22,15 @@ import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; import { useAccount } from 'src/queries/account'; import { queryKey } from 'src/queries/accountBilling'; +import { isCreditCardExpired } from 'src/utilities/creditCard'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; import { PayPalErrorBoundary } from '../../PaymentInfoPanel/PayPalErrorBoundary'; import GooglePayButton from './GooglePayButton'; import PayPalButton from './PayPalButton'; -import CreditCardDialog from './PaymentBits/CreditCardDialog'; +import { CreditCardDialog } from './PaymentBits/CreditCardDialog'; import { PaymentMethodCard } from './PaymentMethodCard'; import { SetSuccess } from './types'; -import { isCreditCardExpired } from 'src/utilities/creditCard'; const useStyles = makeStyles()(() => ({ button: { diff --git a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx index beca9b99c3d..7ed99986599 100644 --- a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx @@ -7,6 +7,7 @@ interface State { } interface Props { + children: React.ReactNode; renderError: (errorMsg: string) => JSX.Element; } diff --git a/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx b/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx index 881d2ae48a0..1942bf0cf0a 100644 --- a/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx +++ b/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom/extend-expect'; import { fireEvent, render } from '@testing-library/react'; import * as React from 'react'; diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx index 3753848e790..9dba00adf70 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx @@ -1,4 +1,3 @@ -import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; import { QueryClient } from 'react-query'; @@ -48,20 +47,15 @@ describe('Database Backups', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { + const { findByText } = renderWithTheme(, { queryClient, }); - // Should render a loading state - expect(getByTestId(loadingTestId)).toBeInTheDocument(); - - // Wait for loading to finish before test continues - await waitForElementToBeRemoved(getByTestId(loadingTestId)); - for (const backup of backups) { // Check to see if all 7 backups are rendered expect( - getByText(formatDate(backup.created, { timezone: 'utc' })) + // eslint-disable-next-line no-await-in-loop + await findByText(formatDate(backup.created, { timezone: 'utc' })) ).toBeInTheDocument(); } }); @@ -81,16 +75,10 @@ describe('Database Backups', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { + const { findByText } = renderWithTheme(, { queryClient, }); - // Should render a loading state - expect(getByTestId(loadingTestId)).toBeInTheDocument(); - - // Wait for loading to finish before test continues - await waitForElementToBeRemoved(getByTestId(loadingTestId)); - - expect(getByText('No backups to display.')).toBeInTheDocument(); + expect(await findByText('No backups to display.')).toBeInTheDocument(); }); }); diff --git a/packages/manager/src/features/Domains/DomainActionMenu.test.tsx b/packages/manager/src/features/Domains/DomainActionMenu.test.tsx index 0830f31780e..4b7efc443a9 100644 --- a/packages/manager/src/features/Domains/DomainActionMenu.test.tsx +++ b/packages/manager/src/features/Domains/DomainActionMenu.test.tsx @@ -1,7 +1,8 @@ +import { userEvent } from '@testing-library/user-event'; import * as React from 'react'; import { domainFactory } from 'src/factories/domain'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { DomainActionMenu } from './DomainActionMenu'; @@ -13,10 +14,17 @@ const props = { }; describe('Domain action menu', () => { - it('should include basic Domain actions', () => { - const { queryByText } = renderWithTheme( + it('should include basic Domain actions', async () => { + const { getByText, queryByLabelText } = renderWithTheme( ); - includesActions(['Edit', 'Clone', 'Delete'], queryByText); + + const actionMenuButton = queryByLabelText(/^Action menu for/)!; + + await userEvent.click(actionMenuButton); + + for (const action of ['Edit', 'Clone', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); }); diff --git a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx index d584addf945..f9277c7c6d9 100644 --- a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx +++ b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx @@ -1,14 +1,13 @@ +import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { FirewallRuleActionMenu, FirewallRuleActionMenuProps, } from './FirewallRuleActionMenu'; -vi.mock('src/components/ActionMenu/ActionMenu'); - const props: FirewallRuleActionMenuProps = { disabled: false, idx: 1, @@ -18,10 +17,17 @@ const props: FirewallRuleActionMenuProps = { }; describe('Firewall rule action menu', () => { - it('should include the correct actions', () => { - const { queryByText } = renderWithTheme( + it('should include the correct actions', async () => { + const { getByText, queryByLabelText } = renderWithTheme( ); - includesActions(['Edit', 'Clone', 'Delete'], queryByText); + + const actionMenuButton = queryByLabelText(/^Action menu for/)!; + + await userEvent.click(actionMenuButton); + + for (const action of ['Edit', 'Clone', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); }); diff --git a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx index c17c3fd635a..b18c4f1aeb7 100644 --- a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx +++ b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx @@ -47,24 +47,21 @@ describe('AddRuleDrawer', () => { getByText('Add an Inbound Rule'); }); - it('disables the port input when the ICMP protocol is selected', () => { + it('disables the port input when the ICMP protocol is selected', async () => { renderWithTheme( ); expect(screen.getByLabelText('Ports')).not.toBeDisabled(); - userEvent.selectOptions(screen.getByPlaceholderText(/protocol/i), 'ICMP'); + await userEvent.selectOptions(screen.getByLabelText('Protocol'), 'ICMP'); expect(screen.getByLabelText('Ports')).toBeDisabled(); }); - it('disables the port input when the IPENCAP protocol is selected', () => { + it('disables the port input when the IPENCAP protocol is selected', async () => { renderWithTheme( ); expect(screen.getByLabelText('Ports')).not.toBeDisabled(); - userEvent.selectOptions( - screen.getByPlaceholderText(/protocol/i), - 'IPENCAP' - ); + await userEvent.selectOptions(screen.getByLabelText('Protocol'), 'IPENCAP'); expect(screen.getByLabelText('Ports')).toBeDisabled(); }); }); diff --git a/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx b/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx index c742b662b04..3ed4808724e 100644 --- a/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx +++ b/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx @@ -14,9 +14,9 @@ const props = { }; describe('Create Firewall Drawer', () => { - it('should close the drawer on cancel', () => { + it('should close the drawer on cancel', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('cancel')); + await userEvent.click(screen.getByTestId('cancel')); expect(props.onClose).toHaveBeenCalledTimes(1); }); @@ -30,8 +30,8 @@ describe('Create Firewall Drawer', () => { it('should validate the form on submit', async () => { renderWithTheme(); - userEvent.type(screen.getByLabelText('Label (required)'), 'a'); - userEvent.click(screen.getByTestId('submit')); + await userEvent.type(screen.getByLabelText('Label (required)'), 'a'); + await userEvent.click(screen.getByTestId('submit')); const error = await screen.findByText( /Label must be between 3 and 32 characters./i ); diff --git a/packages/manager/src/features/Help/StatusBanners.test.tsx b/packages/manager/src/features/Help/StatusBanners.test.tsx index 54768bf999b..9e9bd66bdbb 100644 --- a/packages/manager/src/features/Help/StatusBanners.test.tsx +++ b/packages/manager/src/features/Help/StatusBanners.test.tsx @@ -33,10 +33,10 @@ describe('Status banners from statuspage.io', () => { expect(screen.getByRole('link')).toHaveAttribute('href', props.href); }); - it("clicking a banner's close icon should remove it from view", () => { + it("clicking a banner's close icon should remove it from view", async () => { const { container } = renderWithTheme(); const dismissButton = screen.getByTestId('notice-dismiss'); - userEvent.click(dismissButton); + await userEvent.click(dismissButton); expect(container).toBeEmptyDOMElement(); }); }); diff --git a/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx b/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx index 7cf60a25762..ad975d03544 100644 --- a/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx +++ b/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx @@ -1,9 +1,10 @@ import * as kube from '@linode/api-v4/lib/kubernetes/kubernetes'; import { fireEvent, render } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import * as React from 'react'; import { reactRouterProps } from 'src/__data__/reactRouterProps'; -import { includesActions, wrapWithTheme } from 'src/utilities/testHelpers'; +import { wrapWithTheme } from 'src/utilities/testHelpers'; import { ClusterActionMenu } from './ClusterActionMenu'; @@ -32,18 +33,24 @@ const props = { }; describe('Kubernetes cluster action menu', () => { - it('should include the correct Kube actions', () => { - const { queryByText } = render( + it('should include the correct Kube actions', async () => { + const { getByText, queryByLabelText } = render( wrapWithTheme() ); - includesActions(['Download kubeconfig', 'Delete'], queryByText); + + const actionMenuButton = queryByLabelText(/^Action menu for/)!; + + await userEvent.click(actionMenuButton); + for (const action of ['Download kubeconfig', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); - it('should query the API for a config file when Download kubeconfig is clicked', () => { + it('should query the API for a config file when Download kubeconfig is clicked', async () => { const { getByText } = render( wrapWithTheme() ); - fireEvent.click(getByText(/download/i)); + await fireEvent.click(getByText(/download/i)); expect(mockGetKubeConfig).toHaveBeenCalledWith(123456); }); }); diff --git a/packages/manager/src/features/Linodes/AccessTable.test.tsx b/packages/manager/src/features/Linodes/AccessTable.test.tsx index e0a20d6e9b9..dbe22dc2faf 100644 --- a/packages/manager/src/features/Linodes/AccessTable.test.tsx +++ b/packages/manager/src/features/Linodes/AccessTable.test.tsx @@ -26,7 +26,7 @@ describe('AccessTable', () => { fireEvent.mouseEnter(helpIconButton); - const publicIpsUnassignedTooltip = await findByRole(/tooltip/); + const publicIpsUnassignedTooltip = await findByRole('tooltip'); expect(publicIpsUnassignedTooltip).toContainHTML( PUBLIC_IPS_UNASSIGNED_TOOLTIP_TEXT ); diff --git a/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx b/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx index 10a294b5443..a6c44f5eef3 100644 --- a/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx @@ -40,7 +40,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); // Wait for the options to load (use some unique identifier for the options) await waitFor(() => { @@ -69,7 +69,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The custom no options message should be displayed when there are no options available @@ -93,7 +93,7 @@ describe('LinodeSelect', () => { // Open the dropdown const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The default no options message should be displayed when noOptionsMessage prop is not provided @@ -120,7 +120,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -144,7 +144,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.type(input, 'Linode 2'); + await userEvent.type(input, 'Linode 2'); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -169,7 +169,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // The custom no options message should not be displayed when user input matches an option - userEvent.type(input, 'Linode 1'); + await userEvent.type(input, 'Linode 1'); await waitFor(() => { expect( diff --git a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx index efbcb0ff1f3..235651efc50 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx @@ -30,9 +30,9 @@ describe('ApiAwarenessModal', () => { renderComponent({ isOpen: true }); screen.getByText('Create Linode'); }); - it('Should invoke onClose handler upon cliking close button', () => { + it('Should invoke onClose handler upon cliking close button', async () => { renderComponent({ isOpen: true }); - userEvent.click(screen.getByTestId('close-button')); + await userEvent.click(screen.getByTestId('close-button')); expect(defaultProps.onClose).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx index e828af82c44..63f2f259c6c 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx @@ -34,7 +34,7 @@ import { withAccount, } from 'src/containers/account.container'; import { WithFeatureFlagProps } from 'src/containers/flags.container'; -import { DefaultProps as ImagesProps } from 'src/containers/images.container'; +import { WithImagesProps as ImagesProps } from 'src/containers/images.container'; import { RegionsProps } from 'src/containers/regions.container'; import { WithTypesProps } from 'src/containers/types.container'; import { WithLinodesProps } from 'src/containers/withLinodes.container'; diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx index fa39eab131d..317d2d39b56 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx @@ -30,9 +30,7 @@ import { WithFeatureFlagProps, withFeatureFlags, } from 'src/containers/flags.container'; -import withImages, { - DefaultProps as ImagesProps, -} from 'src/containers/images.container'; +import { WithImagesProps, withImages } from 'src/containers/images.container'; import { WithProfileProps, withProfile, @@ -135,7 +133,7 @@ interface State { type CombinedProps = WithSnackbarProps & CreateType & - ImagesProps & + WithImagesProps & WithTypesProps & WithLinodesProps & RegionsProps & diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx index a3a6879cb1a..fdc2b732fcf 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx @@ -39,9 +39,9 @@ describe('CaptureSnapshot', () => { ); - userEvent.type(getByLabelText('Name Snapshot'), 'my-linode-snapshot'); + await userEvent.type(getByLabelText('Name Snapshot'), 'my-linode-snapshot'); - userEvent.click(getByText('Take Snapshot')); + await userEvent.click(getByText('Take Snapshot')); expect( getByText( diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx index 45cb4a2f974..cb5dd2b9beb 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx @@ -85,7 +85,7 @@ describe('LinodeIPAddressRow', () => { const deleteBtn = getByTestId('action-menu-item-delete'); expect(deleteBtn).toHaveAttribute('aria-disabled', 'true'); fireEvent.mouseEnter(deleteBtn); - const publicIpsUnassignedTooltip = await findByRole(/tooltip/); + const publicIpsUnassignedTooltip = await findByRole('tooltip'); expect(publicIpsUnassignedTooltip).toContainHTML( PUBLIC_IPS_UNASSIGNED_TOOLTIP_TEXT ); @@ -94,7 +94,7 @@ describe('LinodeIPAddressRow', () => { expect(editRDNSBtn).toHaveAttribute('aria-disabled', 'true'); fireEvent.mouseEnter(editRDNSBtn); - const publicIpsUnassignedTooltip2 = await findByRole(/tooltip/); + const publicIpsUnassignedTooltip2 = await findByRole('tooltip'); expect(publicIpsUnassignedTooltip2).toContainHTML( PUBLIC_IPS_UNASSIGNED_TOOLTIP_TEXT ); diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx index 5edb2ac03c9..b2ea8887fd1 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx @@ -29,7 +29,7 @@ describe('LinodeSettingsLabelPanel', () => { await waitFor(() => { // Verify the input contains the Linode's label when it loads it - expect(input).toHaveAttribute('value', 'my-linode-1'); + expect(input).toHaveValue('my-linode-1'); }); // Verify that the save button is disabled (because the label is unmodified) diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx index 2d1084aaa9f..db661dcdeea 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx @@ -46,19 +46,16 @@ const LinodeDetail = () => { have to reload all the configs, disks, etc. once we get to the CloneLanding page. */} - + + + + + ( - - - - - - - )} /> diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx index 78f4fd7e73e..62fde8194bc 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx @@ -1,17 +1,17 @@ import { screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import * as React from 'react'; import { extendedTypes } from 'src/__data__/ExtendedType'; import { linodeBackupsFactory } from 'src/factories/linodes'; import { regionFactory } from 'src/factories/regions'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { LinodeActionMenu, LinodeActionMenuProps, buildQueryStringForLinodeClone, } from './LinodeActionMenu'; -import userEvent from '@testing-library/user-event'; const props: LinodeActionMenuProps = { inListView: true, @@ -31,65 +31,98 @@ const props: LinodeActionMenuProps = { describe('LinodeActionMenu', () => { describe('Action menu', () => { - it('should contain all basic actions when the Linode is running', () => { - renderWithTheme(); - expect( - includesActions( - [ - 'Power Off', - 'Reboot', - 'Launch LISH Console', - 'Clone', - 'Resize', - 'Rebuild', - 'Rescue', - 'Migrate', - 'Delete', - ], - screen.queryByText - ) + it('should contain all basic actions when the Linode is running', async () => { + const { getByLabelText, getByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Linode ${props.linodeLabel}` ); + + await userEvent.click(actionMenuButton); + + const actions = [ + 'Power Off', + 'Reboot', + 'Launch LISH Console', + 'Clone', + 'Resize', + 'Rebuild', + 'Rescue', + 'Migrate', + 'Delete', + ]; + + for (const action of actions) { + expect(getByText(action)).toBeVisible(); + } }); - it('should contain Power On when the Linode is offline', () => { - renderWithTheme(); - expect(includesActions(['Power On'], screen.queryByText)); - expect(screen.queryByText('Power Off')).toBeNull(); + it('should contain Power On when the Linode is offline', async () => { + const { getByLabelText, queryByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Linode ${props.linodeLabel}` + ); + + await userEvent.click(actionMenuButton); + + expect(queryByText('Power On')).toBeVisible(); + expect(queryByText('Power Off')).toBeNull(); }); - it('should contain all actions except Power Off, Reboot, and Launch Console when not in table context', () => { - renderWithTheme( + it('should contain all actions except Power Off, Reboot, and Launch Console when not in table context', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - expect( - includesActions( - ['Clone', 'Resize', 'Rebuild', 'Rescue', 'Migrate', 'Delete'], - screen.queryByText - ) - ); - expect( - includesActions( - ['Launch LISH Console', 'Power On', 'Reboot'], - screen.queryByText, - false - ) + + const actionMenuButton = getByLabelText( + `Action menu for Linode ${props.linodeLabel}` ); + + await userEvent.click(actionMenuButton); + + const actionsThatShouldBeVisible = [ + 'Clone', + 'Resize', + 'Rebuild', + 'Rescue', + 'Migrate', + 'Delete', + ]; + + for (const action of actionsThatShouldBeVisible) { + expect(getByText(action)).toBeVisible(); + } + + const actionsThatShouldNotBeShown = [ + 'Launch LISH Console', + 'Power On', + 'Reboot', + ]; + + for (const action of actionsThatShouldNotBeShown) { + expect(queryByText(action)).toBeNull(); + } }); - it('should allow a reboot if the Linode is running', () => { + it('should allow a reboot if the Linode is running', async () => { renderWithTheme(); - userEvent.click(screen.getByLabelText(/^Action menu for/)); + await userEvent.click(screen.getByLabelText(/^Action menu for/)); expect(screen.queryByText('Reboot')).not.toHaveAttribute('aria-disabled'); }); - it('should disable the reboot action if the Linode is not running', () => { + it('should disable the reboot action if the Linode is not running', async () => { // TODO: Should check for "read_only" permissions too renderWithTheme(); - userEvent.click(screen.getByLabelText(/^Action menu for/)); + await userEvent.click(screen.getByLabelText(/^Action menu for/)); expect(screen.queryByText('Reboot')?.closest('li')).toHaveAttribute( 'aria-disabled', 'true' diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx index d882e9c0b82..234c8c01ab6 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx @@ -19,7 +19,7 @@ describe('LinodeRow', () => { }); }); - it('should render a linode row', () => { + it('should render a linode row', async () => { const linode = linodeFactory.build(); const renderedLinode = ( { // Open action menu const actionMenu = getByLabelText(`Action menu for Linode ${linode.label}`); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); getByText('Power Off'); getByText('Reboot'); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx index 8805a453c84..b783c89e218 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx @@ -54,9 +54,9 @@ describe('AddRouteDrawer (ACLB full create flow)', () => { 'button' ); - userEvent.type(labelTextField, 'my-route'); + await userEvent.type(labelTextField, 'my-route'); - userEvent.click(addButton!); + await userEvent.click(addButton!); await waitFor(() => expect(onClose).toBeCalled()); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx index 108bd77c681..d21934c21f3 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx @@ -60,10 +60,10 @@ describe('EditRouteDrawer (ACLB full create flow)', () => { expect(saveButton).toHaveAttribute('aria-disabled', 'true'); - userEvent.type(routeLabelTextField, 'my-new-label'); + await userEvent.type(routeLabelTextField, 'my-new-label'); expect(saveButton).toHaveAttribute('aria-disabled', 'false'); - userEvent.click(saveButton!); + await userEvent.click(saveButton!); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx index 585e7e109ab..6caa6384b05 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx @@ -24,7 +24,7 @@ export const handlers: Handlers = { }; describe('LoadBalancerConfiguration', () => { - test('Should render Details content', () => { + test('Should render Details content', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } @@ -35,10 +35,10 @@ describe('LoadBalancerConfiguration', () => { ); const ConfigurationPort = screen.getByPlaceholderText('Enter Port'); - userEvent.type(ConfigurationInputLabel, 'Test Label'); + await userEvent.type(ConfigurationInputLabel, 'Test Label'); // Clear the input field before typing - userEvent.clear(ConfigurationPort); - userEvent.type(ConfigurationPort, '90'); + await userEvent.clear(ConfigurationPort); + await userEvent.type(ConfigurationPort, '90'); expect(ConfigurationInputLabel).toHaveValue('Test Label'); expect(ConfigurationPort).toHaveValue(90); @@ -47,34 +47,34 @@ describe('LoadBalancerConfiguration', () => { expect(screen.getByText('Next: Service Targets')).toBeInTheDocument(); expect(screen.queryByText('Previous: Details')).toBeNull(); }); - test('Should navigate to Service Targets content', () => { + test('Should navigate to Service Targets content', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } ); - userEvent.click(screen.getByTestId('service-targets')); + await userEvent.click(screen.getByTestId('service-targets')); expect(screen.getByText('Add Service Target')).toBeInTheDocument(); expect(screen.getByText('Next: Routes')).toBeInTheDocument(); expect(screen.getByText('Previous: Details')).toBeInTheDocument(); expect(screen.queryByText('Previous: Service Targets')).toBeNull(); }); - test('Should navigate to Routes content', () => { + test('Should navigate to Routes content', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } ); - userEvent.click(screen.getByTestId('service-targets')); - userEvent.click(screen.getByTestId('routes')); + await userEvent.click(screen.getByTestId('service-targets')); + await userEvent.click(screen.getByTestId('routes')); expect(screen.getByText('Routes', { selector: 'h2' })).toBeVisible(); expect(screen.getByText('Previous: Service Targets')).toBeInTheDocument(); }); - test('Should be able to go previous step', () => { + test('Should be able to go previous step', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } ); - userEvent.click(screen.getByTestId('service-targets')); - userEvent.click(screen.getByText('Previous: Details')); + await userEvent.click(screen.getByTestId('service-targets')); + await userEvent.click(screen.getByText('Previous: Details')); expect(screen.getByText('Protocol')).toBeInTheDocument(); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx index 82c833f2f76..e011b16c476 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx @@ -43,7 +43,7 @@ describe('ConfigurationAccordion', () => { expect(screen.getByRole('button', { name: 'Edit' })).toBeInTheDocument(); }); - test('should click edit button and validate configuration details in the drawer', () => { + test('should click edit button and validate configuration details in the drawer', async () => { renderWithThemeAndFormik( { } ); - userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); expect( screen.getByRole('dialog', { @@ -85,7 +85,7 @@ describe('ConfigurationAccordion', () => { ).toHaveDisplayValue('8080'); }); - test('should click to expand accordion and validate configuration details', () => { + test('should click to expand accordion and validate configuration details', async () => { renderWithThemeAndFormik( { } ); - userEvent.click( + await userEvent.click( screen.getByRole('heading', { name: configHeading, }) diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx index 40518ea5a23..48fed639b23 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx @@ -35,7 +35,7 @@ describe('ConfigurationAccordionHeader', () => { expect(screen.getByText('1 Route')).toBeInTheDocument(); // Adjust based on pluralize function }); - test('calls editClickHandler when edit button is clicked', () => { + test('calls editClickHandler when edit button is clicked', async () => { const mockEditClickHandler = vi.fn(); renderWithTheme( { /> ); - userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); expect(mockEditClickHandler).toHaveBeenCalled(); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx index 0c7fb8a60cd..15b80bbb206 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx @@ -38,7 +38,7 @@ describe('EditRouteDrawer', () => { screen.getByRole('button', { name: 'Save Changes' }) ).toBeInTheDocument(); }); - test('Should edit and save Route Label', () => { + test('Should edit and save Route Label', async () => { renderWithThemeAndFormik( { userEvent.type(routeLabelFiled, 'rote-new-label'); - userEvent.click(screen.getByRole('button', { name: 'Save Changes' })); + await userEvent.click(screen.getByRole('button', { name: 'Save Changes' })); }); - test('Should call onClose when close button is clicked', () => { + test('Should call onClose when close button is clicked', async () => { const onCloseMock = vi.fn(); renderWithThemeAndFormik( { ); const closeButton = screen.getByRole('button', { name: 'Close drawer' }); - userEvent.click(closeButton); + await userEvent.click(closeButton); expect(onCloseMock).toHaveBeenCalled(); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx index 92aa87fcdb8..fdd32ef7917 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx @@ -29,7 +29,7 @@ describe('RouteAccordionHeader', () => { expect(screen.getByText('0 Rules')).toBeInTheDocument(); // Adjust based on pluralize function }); - test('calls editClickHandler when edit button is clicked', () => { + test('calls editClickHandler when edit button is clicked', async () => { const mockEditClickHandler = vi.fn(); renderWithTheme( { /> ); - userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); expect(mockEditClickHandler).toHaveBeenCalled(); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx index 11907c21f07..1d9e248d5c5 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx @@ -48,7 +48,7 @@ describe('Routes (ACLB full create flow)', () => { expect(getByText(route.label)).toBeVisible(); } }); - it('can remove a route', () => { + it('can remove a route', async () => { const routes: RoutePayload[] = [ { label: 'test-1', protocol: 'http', rules: [] }, { label: 'test-2', protocol: 'http', rules: [] }, @@ -78,10 +78,10 @@ describe('Routes (ACLB full create flow)', () => { ); const actionMenu = getByLabelText(`Action Menu for Route test-2`); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const deleteButton = getByText('Remove'); - userEvent.click(deleteButton); + await userEvent.click(deleteButton); expect(queryByText('test-2')).not.toBeInTheDocument(); expect(getByText('test-1')).toBeInTheDocument(); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx index f641703c476..b2598aa6ab7 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx @@ -47,7 +47,7 @@ describe('ServiceTargets', () => { 'button' ); - userEvent.click(addServiceTargetButton!); + await userEvent.click(addServiceTargetButton!); expect(handlers.handleAddServiceTarget).toHaveBeenCalled(); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx index 2e9b2de4581..eb99d893cab 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; @@ -23,13 +23,11 @@ describe('CreateCertificateDrawer', () => { const certInput = getByLabelText('TLS Certificate'); const keyInput = getByLabelText('Private Key'); - act(() => { - userEvent.type(labelInput, 'my-cert-0'); - userEvent.type(certInput, 'massive cert'); - userEvent.type(keyInput, 'massive key'); + await userEvent.type(labelInput, 'my-cert-0'); + await userEvent.type(certInput, 'massive cert'); + await userEvent.type(keyInput, 'massive key'); - userEvent.click(getByTestId('submit')); - }); + await userEvent.click(getByTestId('submit')); await waitFor(() => expect(onClose).toBeCalled()); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx index 7efd1e5a9fa..d727d4ad7cc 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx @@ -82,9 +82,9 @@ describe('EditCertificateDrawer', () => { expect(labelInput).toHaveDisplayValue(mockCACertificate.label); expect(certInput).toHaveDisplayValue(mockCACertificate.certificate.trim()); - act(() => { - userEvent.type(labelInput, 'my-updated-cert-0'); - userEvent.click(getByTestId('submit')); + await act(async () => { + await userEvent.type(labelInput, 'my-updated-cert-0'); + await userEvent.click(getByTestId('submit')); }); await waitFor(() => expect(onClose).toBeCalled()); @@ -105,12 +105,12 @@ describe('EditCertificateDrawer', () => { const certInput = getByLabelText('TLS Certificate'); const keyInput = getByLabelText('Private Key'); - act(() => { - userEvent.type(labelInput, 'my-cert-0'); - userEvent.type(certInput, 'massive cert'); - userEvent.type(keyInput, 'massive key'); + await act(async () => { + await userEvent.type(labelInput, 'my-cert-0'); + await userEvent.type(certInput, 'massive cert'); + await userEvent.type(keyInput, 'massive key'); - userEvent.click(getByTestId('submit')); + await userEvent.click(getByTestId('submit')); }); await waitFor(() => expect(onClose).toBeCalled()); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx index f697fa32f29..bf97f1bcc30 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx @@ -92,13 +92,13 @@ export const EditRouteDrawer = (props: Props) => { Protocol } + control={} data-qa-radio="HTTP" label="HTTP" value="http" /> } + control={} data-qa-radio="TCP" label="TCP" value="tcp" diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx index 53921248b40..52d7185e7a1 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx @@ -50,7 +50,8 @@ describe('EndpointTable', () => { expect(removeEndpointButton).toBeVisible(); - userEvent.click(removeEndpointButton); + // eslint-disable-next-line no-await-in-loop + await userEvent.click(removeEndpointButton); expect(props.onRemove).toBeCalledWith(endpoints.indexOf(endpoint)); } diff --git a/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx b/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx index 609f4c87c71..dc3eee3e42c 100644 --- a/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx +++ b/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx @@ -1,5 +1,6 @@ import { screen, + waitFor, waitForElementToBeRemoved, within, } from '@testing-library/react'; @@ -67,11 +68,7 @@ describe('LongviewPlans', () => { renderWithTheme(); - await waitForElementToBeRemoved(screen.getByTestId('loading'), { - timeout: 5000, - }); - - expect(document.title).toMatch(/^Plan Details/); + await waitFor(() => expect(document.title).toMatch(/^Plan Details/)); }); it('renders all columns for all plan types', async () => { diff --git a/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx b/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx index 7d5f338ab98..523658f0335 100644 --- a/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx +++ b/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx @@ -1,6 +1,7 @@ +import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { MonitorActionMenu, MonitorActionMenuProps } from './MonitorActionMenu'; @@ -14,26 +15,49 @@ const props: MonitorActionMenuProps = { }; describe('Monitor action menu', () => { - it('should include basic Monitor actions', () => { - const { queryByText } = renderWithTheme( + it('should include basic Monitor actions', async () => { + const { getByLabelText, getByText } = renderWithTheme( ); - includesActions(['View Issue History', 'Edit', 'Delete'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Monitor ${props.label}` + ); + + await userEvent.click(actionMenuButton); + + for (const action of ['View Issue History', 'Edit', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); - it('should include Enable if the monitor is disabled', () => { - const { queryByText } = renderWithTheme( + it('should include Enable if the monitor is disabled', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - includesActions(['Enable'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Monitor ${props.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Enable')).toBeVisible(); expect(queryByText('Disable')).toBeNull(); }); - it('should include Disable if the monitor is enabled', () => { - const { queryByText } = renderWithTheme( + it('should include Disable if the monitor is enabled', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - includesActions(['Disable'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Monitor ${props.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Disable')).toBeVisible(); expect(queryByText('Enable')).toBeNull(); }); }); diff --git a/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx b/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx index 3908c097497..aa9d4c9888c 100644 --- a/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx +++ b/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx @@ -1,15 +1,13 @@ -import { fireEvent, render } from '@testing-library/react'; +import { fireEvent } from '@testing-library/react'; import * as React from 'react'; -import { includesActions, wrapWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme, wrapWithTheme } from 'src/utilities/testHelpers'; import { - SSHAccessActionMenu as ActionMenu, + SSHAccessActionMenu, SSHAccessActionMenuProps, } from './SSHAccessActionMenu'; -vi.mock('src/components/ActionMenu/ActionMenu'); - const mockOpenDrawer = vi.fn(); const props: SSHAccessActionMenuProps = { @@ -20,29 +18,33 @@ const props: SSHAccessActionMenuProps = { }; describe('SSH Access Action Menu', () => { - it('should include basic actions', () => { - const { queryByText } = render(wrapWithTheme()); - includesActions(['Edit'], queryByText); + it('should include basic actions', async () => { + const { getByText } = renderWithTheme(); + + expect(getByText('Edit')).toBeVisible(); + expect(getByText('Disable')).toBeVisible(); }); it('should include Enable if access to the Linode is disabled', () => { - const { queryByText } = render( - wrapWithTheme() + const { queryByText } = renderWithTheme( + ); expect(queryByText('Enable')).toBeInTheDocument(); expect(queryByText('Disable')).not.toBeInTheDocument(); }); it('should include Disable if access to the Linode is enabled', () => { - const { queryByText } = render( - wrapWithTheme() + const { queryByText } = renderWithTheme( + wrapWithTheme() ); expect(queryByText('Disable')).toBeInTheDocument(); expect(queryByText('Enable')).not.toBeInTheDocument(); }); it('should open the drawer when "Edit" option is clicked', () => { - const { getByText } = render(wrapWithTheme()); + const { getByText } = renderWithTheme( + wrapWithTheme() + ); fireEvent.click(getByText('Edit')); expect(mockOpenDrawer).toHaveBeenCalledWith(1); }); diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx index 4ab0ea4a8ab..1c55588a837 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx @@ -42,7 +42,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); // Wait for the options to load (use some unique identifier for the options) await waitFor(() => { @@ -71,7 +71,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The custom no options message should be displayed when there are no options available @@ -95,7 +95,7 @@ describe('NodeBalancerSelect', () => { // Open the dropdown const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The default no options message should be displayed when noOptionsMessage prop is not provided @@ -124,7 +124,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -151,7 +151,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.type(input, 'NodeBalancer 2'); + await userEvent.type(input, 'NodeBalancer 2'); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -179,7 +179,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // The custom no options message should not be displayed when user input matches an option - userEvent.type(input, 'NodeBalancer 1'); + await userEvent.type(input, 'NodeBalancer 1'); await waitFor(() => { expect( diff --git a/packages/manager/src/features/NotificationCenter/NotificationSection.tsx b/packages/manager/src/features/NotificationCenter/NotificationSection.tsx index 223aa3ee385..2dc9b40673d 100644 --- a/packages/manager/src/features/NotificationCenter/NotificationSection.tsx +++ b/packages/manager/src/features/NotificationCenter/NotificationSection.tsx @@ -161,8 +161,8 @@ const ContentBody = React.memo((props: BodyProps) => { <> {_content.map((thisItem) => ( {thisItem.body} @@ -232,14 +232,8 @@ const StyledLToggleContainer = styled(Box, { const StyledNotificationItem = styled(Box, { label: 'StyledNotificationItem', - shouldForwardProp: omittedProps([ - 'count', - 'emptyMessage', - 'header', - 'loading', - 'content', - ]), -})(({ theme, ...props }) => ({ + shouldForwardProp: omittedProps(['header']), +})<{ header: string }>(({ theme, ...props }) => ({ '& p': { color: theme.textColors.headlineStatic, lineHeight: '1.25rem', diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx index f3e49b5c3d0..e0625281e98 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx @@ -63,7 +63,7 @@ describe('HostNamesDrawer', () => { ).toBeInTheDocument(); }); - it('calls onClose when the drawer is closed', () => { + it('calls onClose when the drawer is closed', async () => { renderWithTheme( { ); const closeButton = screen.getByRole('button', { name: 'Close drawer' }); - userEvent.click(closeButton); + await userEvent.click(closeButton); expect(mockOnClose).toHaveBeenCalled(); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx index af8be40e301..f37a071c3d5 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx @@ -1,6 +1,5 @@ -import { screen, waitForElementToBeRemoved } from '@testing-library/react'; +import { screen } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient, setLogger } from 'react-query'; import { objectStorageBucketFactory, @@ -8,22 +7,11 @@ import { } from 'src/factories/objectStorage'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; -import { queryPresets } from 'src/queries/base'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { BucketLanding } from './BucketLanding'; -const queryClient = new QueryClient({ - defaultOptions: { queries: queryPresets.oneTimeFetch }, -}); - describe('ObjectStorageLanding', () => { - afterEach(() => { - queryClient.clear(); - // If necessary, reset React Query logger. - setLogger(console); - }); - it('renders a loading state', () => { // Mock Buckets server.use( @@ -53,30 +41,12 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByTestId('placeholder-button'); + await screen.findByTestId('placeholder-button'); }); it('renders per-cluster errors', async () => { - // Suppress logging React Query errors to CLI since this test is expected - // to trigger errors. - // - // Note: Logging options improved in React Query v4 and `setLogger` will - // be removed in v5. We will be able to accomplish this more cleanly once - // we upgrade. - // - // See also: - // - https://github.com/TanStack/query/issues/125 - // - https://github.com/TanStack/query/discussions/4252 - setLogger({ - log: () => {}, - warn: () => {}, - error: () => {}, - }); - objectStorageBucketFactory.resetSequenceNumber(); objectStorageClusterFactory.resetSequenceNumber(); @@ -113,30 +83,14 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(/^There was an error loading buckets in Fremont, CA/); + await screen.findByText( + /^There was an error loading buckets in Fremont, CA/ + ); }); it('renders general error state', async () => { - // Suppress logging React Query errors to CLI since this test is expected - // to trigger errors. - // - // Note: Logging options improved in React Query v4 and `setLogger` will - // be removed in v5. We will be able to accomplish this more cleanly once - // we upgrade. - // - // See also: - // - https://github.com/TanStack/query/issues/125 - // - https://github.com/TanStack/query/discussions/4252 - setLogger({ - log: () => {}, - warn: () => {}, - error: () => {}, - }); - // Mock Clusters server.use( rest.get('*/object-storage/clusters', (req, res, ctx) => { @@ -151,11 +105,9 @@ describe('ObjectStorageLanding', () => { return res(ctx.status(500), ctx.json([{ reason: 'Cluster offline!' }])); }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(/^There was an error retrieving your buckets/); + await screen.findByText(/^There was an error retrieving your buckets/); }); it('renders rows for each Bucket', async () => { @@ -176,12 +128,10 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(buckets[0].label); - screen.getByText(buckets[1].label); + await screen.findByText(buckets[0].label); + await screen.findByText(buckets[1].label); }); it('renders a "Total usage" section if there is more than one Bucket', async () => { @@ -204,10 +154,8 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(/Total storage used: 10 GB/); + await screen.findByText(/Total storage used: 10 GB/); }); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx index 43054803ef6..b54025501cb 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx @@ -92,7 +92,7 @@ describe('CreateBucketDrawer', () => { getByTestId, } = renderWithTheme(, { queryClient }); - userEvent.type(getByLabelText('Label', { exact: false }), 'my-test-bucket'); + await userEvent.type(getByLabelText('Label', { exact: false }), 'my-test-bucket'); // We must waitFor because we need to load region and cluster data from the API await waitFor(() => @@ -104,7 +104,7 @@ describe('CreateBucketDrawer', () => { const saveButton = getByTestId('create-bucket-button'); - userEvent.click(saveButton); + await userEvent.click(saveButton); await findByText('Object Storage is offline!'); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx index 00b07b00266..efc2669ea5a 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx @@ -41,7 +41,7 @@ describe('OveragePricing', () => { fireEvent.mouseEnter(getByText('network transfer pool for this region')); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toBeInTheDocument(); expect(getByText(DC_SPECIFIC_TRANSFER_POOLS_TOOLTIP_TEXT)).toBeVisible(); @@ -54,7 +54,7 @@ describe('OveragePricing', () => { fireEvent.mouseEnter(getByText('global network transfer pool')); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toBeInTheDocument(); expect(getByText(GLOBAL_TRANSFER_POOL_TOOLTIP_TEXT)).toBeVisible(); diff --git a/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx b/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx index 2e401e6fceb..e36ba887af3 100644 --- a/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx +++ b/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom/extend-expect'; import { fireEvent, render } from '@testing-library/react'; import * as React from 'react'; diff --git a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx index a3d46dc5748..4ae67ab5a57 100644 --- a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx @@ -65,9 +65,9 @@ describe('Create API Token Drawer', () => { ); const labelField = getByTestId('textfield-input'); - userEvent.type(labelField, 'my-test-token'); + await userEvent.type(labelField, 'my-test-token'); const submit = getByText('Create Token'); - userEvent.click(submit); + await userEvent.click(submit); await waitFor(() => expect(props.showSecret).toBeCalledWith('secret-value') @@ -135,10 +135,10 @@ describe('Create API Token Drawer', () => { expect(vpcScope).not.toBeInTheDocument(); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByText } = renderWithTheme(); const cancelButton = getByText(/Cancel/); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); }); diff --git a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx index 61b3a541f1f..03fd219e1e3 100644 --- a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx @@ -66,15 +66,15 @@ describe('Edit API Token Drawer', () => { expect(saveButton).toHaveAttribute('aria-disabled', 'false') ); - userEvent.click(saveButton); + await userEvent.click(saveButton); await waitFor(() => expect(props.onClose).toBeCalled()); }); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByText } = renderWithTheme(); const cancelButton = getByText(/Cancel/); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); }); diff --git a/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx b/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx index 3bf8e780c40..9754156c796 100644 --- a/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx @@ -28,17 +28,17 @@ describe('Revoke API Token Dialog', () => { const revokeButton = getByTestId('revoke-button'); - userEvent.click(revokeButton); + await userEvent.click(revokeButton); // We must wait because an API call (to the MSW) is made await waitFor(() => expect(props.onClose).toBeCalled()); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByTestId } = renderWithTheme(); const cancelButton = getByTestId('cancel-button'); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx index 3d20bb204ac..bb827321048 100644 --- a/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx +++ b/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx @@ -77,10 +77,10 @@ describe('TPADialog', () => { const title = screen.getByText('Change login method to GitHub?'); expect(title).toBeInTheDocument(); }); - it('Should close TPADialog upon clicking close button', () => { + it('Should close TPADialog upon clicking close button', async () => { renderWithTheme(); const cancelButton = screen.getByTestId('confirm-cancel'); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); it('Should redirect to disable TPA', async () => { @@ -89,7 +89,7 @@ describe('TPADialog', () => { renderWithTheme(); const changeButton = screen.getByTestId('confirm-login-change'); - userEvent.click(changeButton); + await userEvent.click(changeButton); expect(props.onClose).toBeCalled(); expect(mockWindow).toHaveBeenCalledWith( @@ -114,7 +114,7 @@ describe('TPADialog', () => { renderWithTheme(); const changeButton = screen.getByTestId('confirm-login-change'); - userEvent.click(changeButton); + await userEvent.click(changeButton); expect(props.onClose).toBeCalled(); expect(mockWindow).toHaveBeenCalledWith( @@ -139,7 +139,7 @@ describe('TPADialog', () => { renderWithTheme(); const changeButton = screen.getByTestId('confirm-login-change'); - userEvent.click(changeButton); + await userEvent.click(changeButton); expect(props.onClose).toBeCalled(); expect(mockWindow).toHaveBeenCalledWith( diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx index 3e7258c310e..d954fb07540 100644 --- a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx +++ b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx @@ -65,7 +65,7 @@ describe('TPAProviders component', () => { ); const button = getByTestId('Button-Google'); - userEvent.click(button); + await userEvent.click(button); const dialog = getByTestId('drawer'); expect(dialog).toBeInTheDocument(); }); diff --git a/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx b/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx index 6a12b590817..03d1ac7174e 100644 --- a/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx +++ b/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -33,9 +33,7 @@ describe('Create API Token Drawer', () => { const submit = getByText('Create'); - act(() => { - userEvent.click(submit); - }); + await userEvent.click(submit); await waitFor(() => expect(getByText('Label is required.')).toBeVisible()); }); @@ -62,20 +60,18 @@ describe('Create API Token Drawer', () => { const submit = getByText('Create'); - act(() => { - userEvent.type(labelField, 'my-oauth-client'); - userEvent.type(callbackUrlField, 'http://localhost:3000'); - userEvent.click(submit); - }); + await userEvent.type(labelField, 'my-oauth-client'); + await userEvent.type(callbackUrlField, 'http://localhost:3000'); + await userEvent.click(submit); await waitFor(() => expect(props.showSecret).toBeCalledWith('omg!')); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByText } = renderWithTheme( ); const cancelButton = getByText('Cancel'); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); }); diff --git a/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx b/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx index da67e8204ed..a2ffc316139 100644 --- a/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx +++ b/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -32,15 +32,11 @@ describe('SSHKeyCreationDrawer', () => { const inputs = getAllByRole('textbox'); - const labelInput = inputs[0]; const sskKeyInput = inputs[1]; const submitButton = getByTestId('submit'); - act(() => { - userEvent.type(labelInput, ''); - userEvent.type(sskKeyInput, 'invalid ssh key'); - userEvent.click(submitButton); - }); + await userEvent.type(sskKeyInput, 'invalid ssh key'); + await userEvent.click(submitButton); await waitFor(() => { getByText('Label is required.'); @@ -64,11 +60,9 @@ describe('SSHKeyCreationDrawer', () => { const sskKeyInput = inputs[1]; const submitButton = getByTestId('submit'); - act(() => { - userEvent.type(labelInput, 'my-ssh-key'); - userEvent.type(sskKeyInput, 'pretend this is a valid ssh key'); - userEvent.click(submitButton); - }); + await userEvent.type(labelInput, 'my-ssh-key'); + await userEvent.type(sskKeyInput, 'pretend this is a valid ssh key'); + await userEvent.click(submitButton); await waitFor(() => { expect(props.onClose).toBeCalled(); diff --git a/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx b/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx index a889b5d4a54..514c581db2c 100644 --- a/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx +++ b/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -43,9 +43,7 @@ describe('DeleteSSHKeyDialog', () => { const submitButton = getByTestId('confirm-delete'); - act(() => { - userEvent.click(submitButton); - }); + await userEvent.click(submitButton); await waitFor(() => { expect(props.onClose).toBeCalled(); @@ -57,9 +55,7 @@ describe('DeleteSSHKeyDialog', () => { const cancelButton = getByTestId('cancel-delete'); - act(() => { - userEvent.click(cancelButton); - }); + await userEvent.click(cancelButton); await waitFor(() => { expect(props.onClose).toBeCalled(); diff --git a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx index b964b21f651..d40fcd04808 100644 --- a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx +++ b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx @@ -466,6 +466,9 @@ const withStackScriptBase = (options: WithStackScriptBaseOptions) => ( }; handleSearch = (value: string) => { + if (!this.mounted) { + return; + } const { currentFilter } = this.state; const { category, history, request } = this.props; diff --git a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx index fe935a1c914..30c51fa3a6e 100644 --- a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx +++ b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx @@ -23,9 +23,7 @@ import { ErrorState } from 'src/components/ErrorState/ErrorState'; import { LandingHeader } from 'src/components/LandingHeader'; import { Notice } from 'src/components/Notice/Notice'; import { Typography } from 'src/components/Typography'; -import withImages, { - DefaultProps as ImagesProps, -} from 'src/containers/images.container'; +import { WithImagesProps, withImages } from 'src/containers/images.container'; import { WithProfileProps, withProfile, @@ -60,7 +58,7 @@ interface Props { } type CombinedProps = Props & - ImagesProps & + WithImagesProps & WithProfileProps & RouteComponentProps<{ stackScriptID: string }> & WithQueryClientProps; diff --git a/packages/manager/src/features/Support/TicketAttachmentList.test.tsx b/packages/manager/src/features/Support/TicketAttachmentList.test.tsx index f27d093a687..c2753eb7d40 100644 --- a/packages/manager/src/features/Support/TicketAttachmentList.test.tsx +++ b/packages/manager/src/features/Support/TicketAttachmentList.test.tsx @@ -36,10 +36,10 @@ describe('TicketAttachmentList component', () => { } } }); - it('should render all attachment when show more is clicked', () => { + it('should render all attachment when show more is clicked', async () => { const { getByText } = renderWithTheme(); const showMoreButton = getByText('Show More Files').closest('button'); - userEvent.click(showMoreButton!); + await userEvent.click(showMoreButton!); for (const attachment of props.attachments) { expect(getByText(attachment)).toBeVisible(); } diff --git a/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx b/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx index 0617029c98d..b67ce7af200 100644 --- a/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx +++ b/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx @@ -43,7 +43,7 @@ describe('VPC create page', () => { expect(createVPCButton).toBeInTheDocument(); expect(subnetIP[3]).toBeInTheDocument(); await act(async () => { - userEvent.click(createVPCButton); + await userEvent.click(createVPCButton); }); const regionError = getByText('Region is required'); expect(regionError).toBeInTheDocument(); @@ -58,7 +58,7 @@ describe('VPC create page', () => { const addSubnet = screen.getByText('Add another Subnet'); expect(addSubnet).toBeInTheDocument(); await act(async () => { - userEvent.click(addSubnet); + await userEvent.click(addSubnet); }); const subnetLabels = screen.getAllByText('Subnet Label'); @@ -69,7 +69,7 @@ describe('VPC create page', () => { const deleteSubnet = screen.getByTestId('delete-subnet-1'); expect(deleteSubnet).toBeInTheDocument(); await act(async () => { - userEvent.click(deleteSubnet); + await userEvent.click(deleteSubnet); }); const subnetLabelAfter = screen.getAllByText('Subnet Label'); @@ -89,7 +89,7 @@ describe('VPC create page', () => { await act(async () => { await userEvent.type(subnetIp, 'bad'); - userEvent.click(createVPCButton); + await userEvent.click(createVPCButton); }); const badSubnetIP = screen.getByText( diff --git a/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx b/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx index 619c50f5b5e..30e32ea53f4 100644 --- a/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx +++ b/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx @@ -29,7 +29,7 @@ const handlers: ActionHandlers = { }; describe('Volume table row', () => { - it("should show the attached Linode's label if present", () => { + it("should show the attached Linode's label if present", async () => { const { getByLabelText, getByTestId, getByText } = renderWithTheme( wrapWithTableBody( @@ -42,13 +42,13 @@ describe('Volume table row', () => { expect(getByTestId('region')); expect(getByText(attachedVolume.linode_label!)); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); // Make sure there is a detach button expect(getByText('Detach')); }); - it('should show Unattached if the Volume is not attached to a Linode', () => { + it('should show Unattached if the Volume is not attached to a Linode', async () => { const { getByLabelText, getByText } = renderWithTheme( wrapWithTableBody( @@ -56,7 +56,7 @@ describe('Volume table row', () => { ); expect(getByText('Unattached')); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); // Make sure there is an attach button expect(getByText('Attach')); @@ -64,7 +64,7 @@ describe('Volume table row', () => { }); describe('Volume table row - for linodes detail page', () => { - it("should show the attached Linode's label if present", () => { + it("should show the attached Linode's label if present", async () => { const { getByLabelText, getByText, @@ -91,7 +91,7 @@ describe('Volume table row - for linodes detail page', () => { // Because we are on a Linode details page, we don't need to show the Linode label expect(queryByText(attachedVolume.linode_label!)).toBeNull(); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); // Make sure there is a detach button expect(getByText('Detach')); diff --git a/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx b/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx index 9fa705666f5..2123552f8b3 100644 --- a/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx +++ b/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx @@ -1,10 +1,13 @@ +import { userEvent } from '@testing-library/user-event'; import * as React from 'react'; import { volumeFactory } from 'src/factories'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { Props, VolumesActionMenu } from './VolumesActionMenu'; +const volume = volumeFactory.build({ linode_id: null, linode_label: null }); + const props: Props = { handlers: { handleAttach: vi.fn(), @@ -16,39 +19,72 @@ const props: Props = { handleResize: vi.fn(), }, isVolumesLanding: true, - volume: volumeFactory.build({ linode_id: null, linode_label: null }), + volume, }; describe('Volume action menu', () => { - it('should include basic Volume actions', () => { - const { queryByText } = renderWithTheme(); - includesActions(['Show Config', 'Edit'], queryByText); + it('should include basic Volume actions', async () => { + const { getByLabelText, getByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${volume.label}` + ); + + await userEvent.click(actionMenuButton); + + for (const action of ['Show Config', 'Edit']) { + expect(getByText(action)).toBeVisible(); + } }); - it('should include Attach if the Volume is not attached', () => { - const { queryByText } = renderWithTheme( + it('should include Attach if the Volume is not attached', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - includesActions(['Attach'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${volume.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Attach')).toBeVisible(); expect(queryByText('Detach')).toBeNull(); }); - it('should include Detach if the Volume is attached', () => { - const { queryByText } = renderWithTheme( - - ); - includesActions(['Detach'], queryByText); + it('should include Detach if the Volume is attached', async () => { + const attachedVolune = volumeFactory.build({ + linode_id: 2, + linode_label: 'linode-2', + }); + + const { getByLabelText, getByText, queryByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${attachedVolune.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Detach')).toBeVisible(); expect(queryByText('Attach')).toBeNull(); }); - it('should include Delete', () => { - const { queryByText } = renderWithTheme(); - includesActions(['Delete'], queryByText); + it('should include Delete', async () => { + const { getByLabelText, getByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${volume.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Delete')).toBeVisible(); }); }); diff --git a/packages/manager/src/hooks/useAPIRequest.test.ts b/packages/manager/src/hooks/useAPIRequest.test.ts index 25e43274226..82311e98ee9 100644 --- a/packages/manager/src/hooks/useAPIRequest.test.ts +++ b/packages/manager/src/hooks/useAPIRequest.test.ts @@ -1,4 +1,4 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import { useAPIRequest } from './useAPIRequest'; @@ -15,44 +15,35 @@ const mockRequestFailure = (): Promise => describe('useAPIRequest', () => { it('sets `data` on load', async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useAPIRequest(mockRequestSuccess, 0) ); - await act(async () => { - await waitForNextUpdate(); - + await waitFor(() => { expect(result.current.data).toEqual(1); }); }); it('executes request when dependencies change', async () => { - let mockDep = 1; - const { rerender, result, waitForNextUpdate } = renderHook(() => - useAPIRequest(mockRequestWithDep(mockDep), 0, [mockDep]) + const { rerender, result } = renderHook( + ({ mockVal }) => + useAPIRequest(mockRequestWithDep(mockVal), 0, [mockVal]), + { initialProps: { mockVal: 0 } } ); - await act(async () => { - await waitForNextUpdate(); - const data1 = result.current.data; + await waitFor(() => expect(result.current.data).toBe(0)); - mockDep = 2; - rerender(); - await waitForNextUpdate(); - const data2 = result.current.data; + rerender({ mockVal: 2 }); - expect(data1).not.toEqual(data2); - }); + await waitFor(() => expect(result.current.data).toBe(2)); }); it('sets error when request fails', async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useAPIRequest(mockRequestFailure, 0) ); - await act(async () => { - await waitForNextUpdate(); - + await waitFor(() => { expect(result.current.error).toEqual(mockError); }); }); diff --git a/packages/manager/src/hooks/useAPIRequest.ts b/packages/manager/src/hooks/useAPIRequest.ts index ac5bcf272ce..25f01e6e09d 100644 --- a/packages/manager/src/hooks/useAPIRequest.ts +++ b/packages/manager/src/hooks/useAPIRequest.ts @@ -47,6 +47,8 @@ export interface UseAPIRequest { * ); * ``` * + * @deprecated Please don't use this. Use React Query! + * * @param request The request function to execute when `deps` change. * @param defaultData Value to use for `data` before request is made. * @param deps The dependencies this hook relies on. Defaults to an empty array diff --git a/packages/manager/src/hooks/useOpenClose.test.ts b/packages/manager/src/hooks/useOpenClose.test.ts index 33100b4e724..23c507eb422 100644 --- a/packages/manager/src/hooks/useOpenClose.test.ts +++ b/packages/manager/src/hooks/useOpenClose.test.ts @@ -1,4 +1,4 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, renderHook } from '@testing-library/react'; import { useOpenClose } from './useOpenClose'; diff --git a/packages/manager/src/hooks/useOrder.test.tsx b/packages/manager/src/hooks/useOrder.test.tsx index 7926311d4d3..94838acd73f 100644 --- a/packages/manager/src/hooks/useOrder.test.tsx +++ b/packages/manager/src/hooks/useOrder.test.tsx @@ -1,4 +1,5 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { QueryClient } from 'react-query'; import { rest, server } from 'src/mocks/testServer'; import { queryClientFactory } from 'src/queries/base'; @@ -49,27 +50,6 @@ vi.mock('react-router-dom', async () => { const queryClient = queryClientFactory(); describe('useOrder hook', () => { - // wait for preferences to load - beforeEach(async () => { - await act(async () => { - server.use( - rest.get('*/profile/preferences', (_, res, ctx) => { - return res( - ctx.json({ - sortKeys: { - 'account-maintenance-order': preferenceOrder, - }, - }) - ); - }) - ); - - await renderHook(() => usePreferences(), { - wrapper: (ui) => wrapWithTheme(ui, { queryClient }), - }).waitForNextUpdate(); - }); - }); - it('should use default sort options when there are no query params or preference', () => { const { result } = renderHook(() => useOrder(defaultOrder), { wrapper: (ui) => wrapWithTheme(ui, { queryClient }), @@ -97,7 +77,31 @@ describe('useOrder hook', () => { }); it('use preferences are used when there are no query params', async () => { - const { result, waitFor } = renderHook( + const queryClient = new QueryClient(); + + server.use( + rest.get('*/profile/preferences', (_, res, ctx) => { + return res( + ctx.json({ + sortKeys: { + 'account-maintenance-order': preferenceOrder, + }, + }) + ); + }) + ); + + const { result: preferencesResult } = renderHook(() => usePreferences(), { + wrapper: (ui) => wrapWithTheme(ui, { queryClient }), + }); + + // This is kind of a bug. useOrder currently requires preferences to be cached + // before it works properly. + await waitFor(() => { + expect(preferencesResult.current.data).toBeDefined(); + }); + + const { result } = renderHook( () => useOrder(defaultOrder, 'account-maintenance-order'), { wrapper: (ui) => wrapWithTheme(ui, { queryClient }), diff --git a/packages/manager/src/hooks/useSet.test.ts b/packages/manager/src/hooks/useSet.test.ts index 50e506319ae..6fc09f430c5 100644 --- a/packages/manager/src/hooks/useSet.test.ts +++ b/packages/manager/src/hooks/useSet.test.ts @@ -1,4 +1,4 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, renderHook } from '@testing-library/react'; import { useSet } from './useSet'; diff --git a/packages/manager/src/index.tsx b/packages/manager/src/index.tsx index d3fee1824f2..34b40de4edc 100644 --- a/packages/manager/src/index.tsx +++ b/packages/manager/src/index.tsx @@ -1,7 +1,7 @@ import CssBaseline from '@mui/material/CssBaseline'; import 'font-logos/assets/font-logos.css'; import * as React from 'react'; -import * as ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import { QueryClientProvider } from 'react-query'; import { ReactQueryDevtools } from 'react-query/devtools'; import { Provider as ReduxStoreProvider } from 'react-redux'; @@ -97,7 +97,9 @@ async function loadApp() { // This ensures the MSW is setup before we start making API calls. await loadDevTools(store); } - ReactDOM.render(, document.getElementById('root')); + const container = document.getElementById('root'); + const root = createRoot(container!); + root.render(); } loadApp(); diff --git a/packages/manager/src/testSetup.ts b/packages/manager/src/testSetup.ts index 6f87e964ec6..4cfaec0117d 100644 --- a/packages/manager/src/testSetup.ts +++ b/packages/manager/src/testSetup.ts @@ -1,17 +1,19 @@ -import matchers from '@testing-library/jest-dom/matchers'; +import * as matchers from '@testing-library/jest-dom/matchers'; +import { cleanup } from '@testing-library/react'; import { expect } from 'vitest'; -// JSDom matchers. +import { server } from './mocks/testServer'; + expect.extend(matchers); -import { server } from './mocks/testServer'; +afterEach(() => { + cleanup(); +}); beforeAll(() => server.listen({ onUnhandledRequest: 'warn' })); afterAll(() => server.close()); afterEach(() => server.resetHandlers()); -require('@testing-library/jest-dom/extend-expect'); - // @ts-expect-error this prevents some console errors HTMLCanvasElement.prototype.getContext = () => { return 0; diff --git a/packages/manager/src/utilities/link.test.tsx b/packages/manager/src/utilities/link.test.tsx index d357e0454dc..95b20d0f923 100644 --- a/packages/manager/src/utilities/link.test.tsx +++ b/packages/manager/src/utilities/link.test.tsx @@ -75,6 +75,7 @@ describe('childrenContainsNoText', () => { it('should return true if children are not valid React elements', () => { const invalidChildren = {}; const emptyArray: React.ReactNode[] = []; + // @ts-expect-error we are testing an invalid input expect(childrenContainsNoText(invalidChildren)).toBe(true); expect(childrenContainsNoText(emptyArray)).toBe(true); }); diff --git a/packages/manager/src/utilities/testHelpers.tsx b/packages/manager/src/utilities/testHelpers.tsx index 228a8ea9de3..541a0191633 100644 --- a/packages/manager/src/utilities/testHelpers.tsx +++ b/packages/manager/src/utilities/testHelpers.tsx @@ -1,10 +1,4 @@ -import { - MatcherFunction, - RenderResult, - render, - screen, -} from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; +import { MatcherFunction, render } from '@testing-library/react'; import mediaQuery from 'css-mediaquery'; import { Formik, FormikConfig, FormikValues } from 'formik'; import { LDProvider } from 'launchdarkly-react-client-sdk'; @@ -165,82 +159,6 @@ export const renderWithThemeAndFormik = ( configObj: FormikConfig ) => renderWithTheme({ui}); -declare global { - // export would be better, but i m aligning with how the namespace is declared by vi-axe - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace vi { - interface Matchers { - toPassAxeCheck(): R; - } - } -} -export const toPassAxeCheck = { - toPassAxeCheck(received: RenderResult) { - // if ((typeof rec) !== RenderResult){ - // return { - // pass:false, - // message:()=> `Expected type RenderResult (result of function call render...)` - // }; - // } - const anchors = received.container.querySelectorAll('a'); - // Here i want to use forEach but tslint has a bug saying not all my pth return a value, - // which is intended as i want to return only if there is an error, if not keep traversing - // Also i could have used For .. Of but this was making tslint think e was a string... - for (let i = 0; i < anchors.length; i++) { - const e = anchors[i]; - const hasHref = e.hasAttribute('href'); - if (!hasHref) { - return { - message: () => `anchors has no href - specify a value for href - \nsee: https://a11yproject.com/posts/creating-valid-and-accessible-links/:\n${received.debug( - e - )}`, - pass: false, - }; - } - let hrefAtt = e.getAttribute('href'); - if (hrefAtt == null) { - return { - message: () => `anchors has bad href - specify a non null value for href - \nsee: https://a11yproject.com/posts/creating-valid-and-accessible-links/:\n${received.debug( - e - )}`, - pass: false, - }; - } - hrefAtt = hrefAtt as string; - if (['#', ''].includes(hrefAtt) || hrefAtt.includes('javascript')) { - return { - message: () => `anchors has invalid href - specify a valid value not #,'' or javascript(void) - \nsee: https://a11yproject.com/posts/creating-valid-and-accessible-links/:\n${received.debug( - e - )}`, - pass: false, - }; - } - // ugly trick to bypass tslint inablility to understand it s normal not to return - continue; - } - return { message: () => '!', pass: true }; - }, -}; - -export const includesActions = ( - actions: string[], - query: any, - includes = true -) => { - const actionMenuButton = screen.queryByLabelText(/^Action menu for/); - if (actionMenuButton) { - userEvent.click(actionMenuButton); - } - for (const action of actions) { - includes - ? expect(query(action)).toBeInTheDocument() - : expect(query(action)).not.toBeInTheDocument(); - } -}; - type Query = (f: MatcherFunction) => HTMLElement; /** H/T to https://stackoverflow.com/questions/55509875/how-to-query-by-text-string-which-contains-html-tags-using-react-testing-library */ diff --git a/yarn.lock b/yarn.lock index 35cee6d6553..24f16828c76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,119 +2,121 @@ # yarn lockfile v1 -"@algolia/cache-browser-local-storage@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz#b9e0da012b2f124f785134a4d468ee0841b2399d" - integrity sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw== - dependencies: - "@algolia/cache-common" "4.14.3" - -"@algolia/cache-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.3.tgz#a78e9faee3dfec018eab7b0996e918e06b476ac7" - integrity sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q== - -"@algolia/cache-in-memory@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz#96cefb942aeb80e51e6a7e29f25f4f7f3439b736" - integrity sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg== - dependencies: - "@algolia/cache-common" "4.14.3" - -"@algolia/client-account@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.3.tgz#6d7d032a65c600339ce066505c77013d9a9e4966" - integrity sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/client-search" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-analytics@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.3.tgz#ca409d00a8fff98fdcc215dc96731039900055dc" - integrity sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/client-search" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.3.tgz#c44e48652b2121a20d7a40cfd68d095ebb4191a8" - integrity sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw== - dependencies: - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-personalization@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.3.tgz#8f71325035aa2a5fa7d1d567575235cf1d6c654f" - integrity sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-search@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.3.tgz#cf1e77549f5c3e73408ffe6441ede985fde69da0" - integrity sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/logger-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.3.tgz#87d4725e7f56ea5a39b605771b7149fff62032a7" - integrity sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw== - -"@algolia/logger-console@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.3.tgz#1f19f8f0a5ef11f01d1f9545290eb6a89b71fb8a" - integrity sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw== - dependencies: - "@algolia/logger-common" "4.14.3" - -"@algolia/requester-browser-xhr@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz#bcf55cba20f58fd9bc95ee55793b5219f3ce8888" - integrity sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q== - dependencies: - "@algolia/requester-common" "4.14.3" - -"@algolia/requester-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.3.tgz#2d02fbe01afb7ae5651ae8dfe62d6c089f103714" - integrity sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw== - -"@algolia/requester-node-http@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz#72389e1c2e5d964702451e75e368eefe85a09d8f" - integrity sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA== - dependencies: - "@algolia/requester-common" "4.14.3" - -"@algolia/transporter@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.3.tgz#5593036bd9cf2adfd077fdc3e81d2e6118660a7a" - integrity sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w== - dependencies: - "@algolia/cache-common" "4.14.3" - "@algolia/logger-common" "4.14.3" - "@algolia/requester-common" "4.14.3" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@adobe/css-tools@^4.3.2": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" + integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== + +"@algolia/cache-browser-local-storage@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1" + integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@algolia/cache-common" "4.22.1" + +"@algolia/cache-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1" + integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== + +"@algolia/cache-in-memory@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71" + integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== + dependencies: + "@algolia/cache-common" "4.22.1" + +"@algolia/client-account@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43" + integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-analytics@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851" + integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05" + integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== + dependencies: + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-personalization@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d" + integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-search@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2" + integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/logger-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9" + integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== + +"@algolia/logger-console@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336" + integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== + dependencies: + "@algolia/logger-common" "4.22.1" + +"@algolia/requester-browser-xhr@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361" + integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== + dependencies: + "@algolia/requester-common" "4.22.1" + +"@algolia/requester-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff" + integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== + +"@algolia/requester-node-http@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b" + integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== + dependencies: + "@algolia/requester-common" "4.22.1" + +"@algolia/transporter@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1" + integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== + dependencies: + "@algolia/cache-common" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/requester-common" "4.22.1" -"@ampproject/remapping@^2.2.1": +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -129,29 +131,7 @@ dependencies: default-browser-id "3.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -159,141 +139,33 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.20.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" - integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== - -"@babel/compat-data@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.3.tgz#cd502a6a0b6e37d7ad72ce7e71a7160a3ae36f7e" - integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ== - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== - -"@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.12": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.18.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.21.3": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.1.tgz#5de51c5206f4c6f5533562838337a603c1033cfd" - integrity sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.22.0" - "@babel/helper-compilation-targets" "^7.22.1" - "@babel/helper-module-transforms" "^7.22.1" - "@babel/helpers" "^7.22.0" - "@babel/parser" "^7.22.0" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.23.0", "@babel/core@^7.23.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" - integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.20.12", "@babel/core@^7.21.3", "@babel/core@^7.23.0", "@babel/core@^7.23.2": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.6" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.21.0": - version "7.21.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== - dependencies: - "@babel/types" "^7.21.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e" - integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A== - dependencies: - "@babel/types" "^7.22.3" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.6": +"@babel/generator@^7.23.0", "@babel/generator@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== @@ -303,13 +175,6 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -324,40 +189,7 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz#bfcd6b7321ffebe33290d68550e2c9d7eb7c7a58" - integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ== - dependencies: - "@babel/compat-data" "^7.22.0" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== @@ -369,9 +201,9 @@ semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" - integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" + integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" @@ -383,30 +215,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz#53ff78472e5ce10a52664272a239787107603ebb" - integrity sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -415,10 +224,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -426,17 +235,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-environment-visitor@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8" - integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA== - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -463,66 +262,13 @@ dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-imports@^7.22.15": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.21.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-module-transforms@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz#e0cad47fedcf3cae83c11021696376e2d5a50c63" - integrity sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== - 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-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" @@ -541,12 +287,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== @@ -560,7 +301,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -569,20 +310,6 @@ "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-simple-access@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" - integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== - dependencies: - "@babel/types" "^7.21.5" - "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -597,13 +324,6 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -611,47 +331,17 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" - integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== @@ -665,59 +355,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/helpers@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.3.tgz#53b74351da9684ea2f694bf0877998da26dd830e" - integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w== - dependencies: - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.3" - -"@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - -"@babel/helpers@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" - integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" "@babel/highlight@^7.23.4": version "7.23.4" @@ -728,32 +373,7 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.7.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== - -"@babel/parser@^7.21.9", "@babel/parser@^7.22.0": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" - integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/parser@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== - -"@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@babel/parser@^7.23.9": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9", "@babel/parser@^7.7.0": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== @@ -774,10 +394,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.23.3" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -942,10 +562,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -975,15 +595,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.23.3": +"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== @@ -1000,16 +612,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" @@ -1132,16 +743,7 @@ "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.23.3": +"@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== @@ -1150,10 +752,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" @@ -1183,15 +785,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== @@ -1234,16 +828,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": +"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== @@ -1259,15 +844,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.23.3": +"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== @@ -1293,18 +870,18 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-self@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz#ec98d4a9baafc5a1eb398da4cf94afbb40254a54" - integrity sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" + integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-source@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" - integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" + integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-regenerator@^7.23.3": version "7.23.3" @@ -1399,9 +976,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.23.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" - integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" + integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== dependencies: "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.23.6" @@ -1409,7 +986,7 @@ "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1430,13 +1007,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" "@babel/plugin-transform-async-to-generator" "^7.23.3" "@babel/plugin-transform-block-scoped-functions" "^7.23.3" "@babel/plugin-transform-block-scoping" "^7.23.4" "@babel/plugin-transform-class-properties" "^7.23.3" "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-classes" "^7.23.8" "@babel/plugin-transform-computed-properties" "^7.23.3" "@babel/plugin-transform-destructuring" "^7.23.3" "@babel/plugin-transform-dotall-regex" "^7.23.3" @@ -1452,7 +1029,7 @@ "@babel/plugin-transform-member-expression-literals" "^7.23.3" "@babel/plugin-transform-modules-amd" "^7.23.3" "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.23.3" @@ -1478,9 +1055,9 @@ "@babel/plugin-transform-unicode-regex" "^7.23.3" "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1514,14 +1091,14 @@ "@babel/plugin-transform-typescript" "^7.23.3" "@babel/register@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" - integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" + integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.5" + pirates "^4.0.6" source-map-support "^0.5.16" "@babel/regjsgen@^0.8.0": @@ -1529,70 +1106,23 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime-corejs3@^7.10.2": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" - integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== - dependencies: - core-js-pure "^3.25.1" - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.12.13": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.13.10": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.22.10": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.21.9": - version "7.21.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" - integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/parser" "^7.21.9" - "@babel/types" "^7.21.5" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.22.1", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.6", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.9", "@babel/traverse@^7.7.0": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== @@ -1608,61 +1138,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.21.3", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071" - integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA== - dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" - integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.9": +"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== @@ -1688,10 +1164,15 @@ dependencies: promise-polyfill "^8.1.3" -"@braintree/browser-detection@1.14.0", "@braintree/browser-detection@^1.12.1": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@braintree/browser-detection/-/browser-detection-1.14.0.tgz#d1b397b00ccbc7cac12f6cec27c0a413d740332a" - integrity sha512-OsqU+28RhNvSw8Y5JEiUHUrAyn4OpYazFkjSJe8ZVZfkAaRXQc6hsV38MMEpIlkPMig+A68buk/diY+0O8/dMQ== +"@braintree/browser-detection@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@braintree/browser-detection/-/browser-detection-1.17.1.tgz#d151c409dc7245e9307b05f3a06ede254e0f5d1e" + integrity sha512-Mk7jauyp9pD14BTRS7otoy9dqIJGb3Oy0XtxKM/adGD9i9MAuCjH5uRZMyW2iVmJQTaA/PLlWdG7eSDyMWMc8Q== + +"@braintree/browser-detection@^1.12.1": + version "1.17.2" + resolved "https://registry.yarnpkg.com/@braintree/browser-detection/-/browser-detection-1.17.2.tgz#bf4edf97a90897aaa0956869316e50be0c4fbcb5" + integrity sha512-DdEX09uYs6kHwGt4cbONlxlta/0hfmrDUncP6EtfZxFVywNF9LeRUyon+2LihJTbqgSnGqz9ZL450hkqBd6oSw== "@braintree/event-emitter@0.4.1": version "0.4.1" @@ -1708,10 +1189,10 @@ resolved "https://registry.yarnpkg.com/@braintree/iframer/-/iframer-1.1.0.tgz#7e59b975c2a48bd92616f653367a5214fc2ddd4b" integrity sha512-tVpr7U6u6bqeQlHreEjYMNtnHX62vLnNWziY2kQLqkWhvusPuY5DfuGEIPpWqsd+V/a1slyTQaxK6HWTlH6A/Q== -"@braintree/sanitize-url@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" - integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== +"@braintree/sanitize-url@6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" + integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== "@braintree/uuid@0.1.0", "@braintree/uuid@^0.1.0": version "0.1.0" @@ -1789,16 +1270,16 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@*": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" - integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== +"@emotion/cache@*", "@emotion/cache@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" + integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/sheet" "^1.2.1" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - stylis "4.1.3" + "@emotion/memoize" "^0.8.1" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + stylis "4.2.0" "@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": version "10.0.29" @@ -1810,17 +1291,6 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - "@emotion/core@^10.0.9": version "10.3.1" resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.3.1.tgz#4021b6d8b33b3304d48b0bb478485e7d7421c69d" @@ -1847,11 +1317,6 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/hash@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" - integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== - "@emotion/hash@^0.9.1": version "0.9.1" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" @@ -1869,39 +1334,34 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@emotion/memoize@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" - integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== - "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== "@emotion/react@^11.11.1": - version "11.11.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" - integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== + version "11.11.3" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" + integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.11.0" "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" + "@emotion/serialize" "^1.1.3" "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" "@emotion/utils" "^1.2.1" "@emotion/weak-memoize" "^0.3.1" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" - integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== +"@emotion/serialize@*", "@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" + integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA== dependencies: - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/unitless" "^0.8.0" - "@emotion/utils" "^1.2.0" + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" csstype "^3.0.2" "@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": @@ -1915,27 +1375,11 @@ "@emotion/utils" "0.11.3" csstype "^2.5.7" -"@emotion/serialize@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" - integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/sheet@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" - integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== - "@emotion/sheet@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" @@ -1963,275 +1407,260 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/unitless@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== - "@emotion/unitless@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" - integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": +"@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== -"@emotion/utils@*", "@emotion/utils@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" - integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== +"@emotion/utils@*", "@emotion/utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" + integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== "@emotion/utils@0.11.3": version "0.11.3" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - "@emotion/weak-memoize@0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@emotion/weak-memoize@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" - integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== - "@emotion/weak-memoize@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== -"@esbuild/android-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456" - integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA== +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== -"@esbuild/android-arm@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb" - integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA== +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== -"@esbuild/android-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7" - integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A== +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== -"@esbuild/darwin-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2" - integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw== +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== -"@esbuild/darwin-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac" - integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q== +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== -"@esbuild/freebsd-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575" - integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw== +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== -"@esbuild/freebsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3" - integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg== +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== -"@esbuild/linux-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098" - integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ== +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== -"@esbuild/linux-arm@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f" - integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ== +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== -"@esbuild/linux-ia32@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d" - integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ== +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== -"@esbuild/linux-loong64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123" - integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ== +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== -"@esbuild/linux-mips64el@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24" - integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q== +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== -"@esbuild/linux-ppc64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951" - integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg== +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== -"@esbuild/linux-riscv64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b" - integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg== +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== -"@esbuild/linux-s390x@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a" - integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg== +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== -"@esbuild/linux-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b" - integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg== +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== -"@esbuild/netbsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137" - integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw== +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== -"@esbuild/openbsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d" - integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ== +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== -"@esbuild/sunos-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1" - integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w== +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== -"@esbuild/win32-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1" - integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg== +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== -"@esbuild/win32-ia32@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851" - integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw== +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@esbuild/win32-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz#c8285183dbdb17008578dbacb6e22748709b4822" - integrity sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA== +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -2240,14 +1669,19 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -2255,45 +1689,50 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + "@fal-works/esbuild-plugin-global-externals@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== +"@floating-ui/core@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" + integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== dependencies: - "@floating-ui/utils" "^0.1.1" + "@floating-ui/utils" "^0.2.1" -"@floating-ui/dom@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7" - integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw== +"@floating-ui/dom@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.1.tgz#d552e8444f77f2d88534372369b3771dc3a2fa5d" + integrity sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ== dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.1" -"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" - integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== +"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" + integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== dependencies: - "@floating-ui/dom" "^1.5.1" + "@floating-ui/dom" "^1.6.1" -"@floating-ui/utils@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" - integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== +"@floating-ui/utils@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" + integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -2301,22 +1740,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2334,20 +1761,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/expect-utils@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.3.tgz#95ce4df62952f071bcd618225ac7c47eaa81431e" - integrity sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ== - dependencies: - jest-get-type "^29.4.3" - -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== - dependencies: - "@sinclair/typebox" "^0.25.16" - "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -2356,43 +1769,32 @@ "@sinclair/typebox" "^0.27.8" "@jest/transform@^29.3.1": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.3.tgz#f7d17eac9cb5bb2e1222ea199c7c7e0835e0c037" - integrity sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg== + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.4.3" - "@jridgewell/trace-mapping" "^0.3.15" + "@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.4.3" - jest-regex-util "^29.4.3" - jest-util "^29.4.3" + 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" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.3.tgz#9069145f4ef09adf10cec1b2901b2d390031431f" - integrity sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -2409,15 +1811,7 @@ magic-string "^0.27.0" react-docgen-typescript "^2.2.2" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== @@ -2426,36 +1820,17 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -2468,22 +1843,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@juggle/resize-observer@^3.3.1": version "3.4.0" resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" @@ -2536,104 +1903,101 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" -"@mui/base@5.0.0-beta.13": - version "5.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.13.tgz#3bae94c39752546d84a67d4ca73486b7c4923a89" - integrity sha512-uC0l97pBspfDAp+iz2cJq8YZ8Sd9i73V77+WzUiOAckIVEyCm5dyVDZCCO2/phmzckVEeZCGcytybkjMQuhPQw== +"@mui/base@5.0.0-beta.36": + version "5.0.0-beta.36" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.36.tgz#29ca2de9d387f6d3943b6f18a84415c43e5f206c" + integrity sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ== dependencies: - "@babel/runtime" "^7.22.10" - "@emotion/is-prop-valid" "^1.2.1" - "@floating-ui/react-dom" "^2.0.1" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.7" + "@babel/runtime" "^7.23.9" + "@floating-ui/react-dom" "^2.0.8" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.9" "@popperjs/core" "^2.11.8" - clsx "^2.0.0" + clsx "^2.1.0" prop-types "^15.8.1" - react-is "^18.2.0" -"@mui/core-downloads-tracker@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.7.tgz#95bed2487bf59632125a13b8eb8f4c21e460afec" - integrity sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA== +"@mui/core-downloads-tracker@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.9.tgz#c29138c70cc0fb49cd909c29beef3fb0647e5af7" + integrity sha512-CSDpVevGaxsvMkiYBZ8ztki1z/eT0mM2MqUT21eCRiMz3DU4zQw5rXG5ML/yTuJF9Z2Wv9SliIeaRAuSR/9Nig== "@mui/icons-material@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.14.7.tgz#d7f6bd188fe38adf35c89d9343b8a529c2306383" - integrity sha512-mWp4DwMa8c1Gx9yOEtPgxM4b+e6hAbtZyzfSubdBwrnEE6G5D2rbAJ5MB+If6kfI48JaYaJ5j8+zAdmZLuZc0A== + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.15.9.tgz#8d11839d35cf3cfd62df40934d8e9485f66be620" + integrity sha512-6tLQoM6RylQuDnHR6qQay0G0pJgKmrhn5MIm0IfrwtmSO8eV5iUFR+nNUTXsWa24gt7ZbIKnJ962UlYaeXa4bg== dependencies: - "@babel/runtime" "^7.22.10" + "@babel/runtime" "^7.23.9" "@mui/material@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.7.tgz#6c2c0de8a625562f789e1bb33cb4cfc8cf20bdb0" - integrity sha512-jIZj9F7zMv6IlyaYDVv5M2Kp20jIX8c0kzuwteySHS/A0IvPVyomQEPtWc51MCbpDNCqzwoZUp3rQtA2lI8k7A== - dependencies: - "@babel/runtime" "^7.22.10" - "@mui/base" "5.0.0-beta.13" - "@mui/core-downloads-tracker" "^5.14.7" - "@mui/system" "^5.14.7" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.7" - "@types/react-transition-group" "^4.4.6" - clsx "^2.0.0" - csstype "^3.1.2" + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.9.tgz#4d6a4aee002c6a2d0e174e08c6d23245c18dd828" + integrity sha512-kbHTZDcFmN8GHKzRpImUEl9AJfFWI/0Kl+DsYVT3kHzQWUuHiKm3uHXR1RCOqr7H8IgHFPdbxItmCSQ/mj7zgg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/base" "5.0.0-beta.36" + "@mui/core-downloads-tracker" "^5.15.9" + "@mui/system" "^5.15.9" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.9" + "@types/react-transition-group" "^4.4.10" + clsx "^2.1.0" + csstype "^3.1.3" prop-types "^15.8.1" react-is "^18.2.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.14.7.tgz#c9fec31e59bf66b12959e724b0e8ec3bb4a3d923" - integrity sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ== +"@mui/private-theming@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.9.tgz#3ea3514ed2f6bf68541dbe9206665a82cd89cb01" + integrity sha512-/aMJlDOxOTAXyp4F2rIukW1O0anodAMCkv1DfBh/z9vaKHY3bd5fFf42wmP+0GRmwMinC5aWPpNfHXOED1fEtg== dependencies: - "@babel/runtime" "^7.22.10" - "@mui/utils" "^5.14.7" + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.15.9" prop-types "^15.8.1" -"@mui/styled-engine@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.14.7.tgz#aaacec6c87bcc9a180b2da062c613213af10f2e3" - integrity sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg== +"@mui/styled-engine@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.9.tgz#444605039ec3fe456bdd5d5cb94330183be62b91" + integrity sha512-NRKtYkL5PZDH7dEmaLEIiipd3mxNnQSO+Yo8rFNBNptY8wzQnQ+VjayTq39qH7Sast5cwHKYFusUrQyD+SS4Og== dependencies: - "@babel/runtime" "^7.22.10" + "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" - csstype "^3.1.2" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.7.tgz#b08e23f9151d38186ab12dd618906abd4d73d203" - integrity sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q== - dependencies: - "@babel/runtime" "^7.22.10" - "@mui/private-theming" "^5.14.7" - "@mui/styled-engine" "^5.14.7" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.7" - clsx "^2.0.0" - csstype "^3.1.2" +"@mui/system@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.9.tgz#8a34ac0ab133af2550cc7ab980a35174142fd265" + integrity sha512-SxkaaZ8jsnIJ77bBXttfG//LUf6nTfOcaOuIgItqfHv60ZCQy/Hu7moaob35kBb+guxVJnoSZ+7vQJrA/E7pKg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.15.9" + "@mui/styled-engine" "^5.15.9" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.9" + clsx "^2.1.0" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" - integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== +"@mui/types@^7.2.13": + version "7.2.13" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.13.tgz#d1584912942f9dc042441ecc2d1452be39c666b8" + integrity sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g== -"@mui/utils@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.7.tgz#3677bcabe032f1185e151f57d8c1a166df3ae0a1" - integrity sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw== +"@mui/utils@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.9.tgz#2bdf925e274d87cbe90c14eb52d0835318205e86" + integrity sha512-yDYfr61bCYUz1QtwvpqYy/3687Z8/nS4zv7lv/ih/6ZFGMl1iolEvxRmR84v2lOYxlds+kq1IVYbXxDKh8Z9sg== dependencies: - "@babel/runtime" "^7.22.10" - "@types/prop-types" "^15.7.5" - "@types/react-is" "^18.2.1" + "@babel/runtime" "^7.23.9" + "@types/prop-types" "^15.7.11" prop-types "^15.8.1" react-is "^18.2.0" "@ndelangen/get-tarball@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.7.tgz#87c7aef2df4ff4fbdbab6ac9ed32cee142c4b1a3" - integrity sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ== + version "3.0.9" + resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964" + integrity sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA== dependencies: gunzip-maybe "^1.4.2" pump "^3.0.0" @@ -2681,9 +2045,9 @@ "@paypal/sdk-constants" "^1.0.122" "@paypal/sdk-constants@^1.0.122": - version "1.0.129" - resolved "https://registry.yarnpkg.com/@paypal/sdk-constants/-/sdk-constants-1.0.129.tgz#23d878c1413d90e09d9a94fd8d9170a4a46f0543" - integrity sha512-FnZk6JZDGDxPCKHHsQ7HBBpelEy8+VFO78PlvdubgY8LGCql9eU7q1SQLYSiSW0zA5Lpr6zqVSFY0gRmlUFO9g== + version "1.0.139" + resolved "https://registry.yarnpkg.com/@paypal/sdk-constants/-/sdk-constants-1.0.139.tgz#b8918d26ae0feecf38ba9ad367243165af57818c" + integrity sha512-rCRL2Ys5OAbSCLcJjaFlunJWrgY92UzGNrHb7wYnr//sEXSRJx1n8Na/jxSxiFBmp4GGa/TbgodJvM80fx1iyQ== dependencies: hi-base32 "^0.5.0" @@ -2692,10 +2056,10 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.23" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" - integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.24" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" + integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== "@popperjs/core@^2.11.8": version "2.11.8" @@ -3028,143 +2392,161 @@ tslib "^2.0.0" warning "^4.0.3" -"@rollup/pluginutils@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" - integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== +"@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.4": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz#0ea289f68ff248b50fea5716ca9f65f7d4dba3ae" - integrity sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA== - -"@rollup/rollup-android-arm64@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz#27c8c67fc5de574874085a1b480ac65b3e18378e" - integrity sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA== - -"@rollup/rollup-darwin-arm64@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz#c5735c042980c85495411af7183dd20294763bd8" - integrity sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw== - -"@rollup/rollup-darwin-x64@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz#af844bd54abb73ca3c9cf89a31eec17861d1375d" - integrity sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg== - -"@rollup/rollup-linux-arm-gnueabihf@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz#5e972f63c441eaf859551039b3f18db9b035977d" - integrity sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ== - -"@rollup/rollup-linux-arm64-gnu@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz#f4cfbc71e3b6fdb395b28b1472414e181515c72d" - integrity sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw== - -"@rollup/rollup-linux-arm64-musl@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz#6a94c691830dc29bf708de7c640f494996130893" - integrity sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw== - -"@rollup/rollup-linux-x64-gnu@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz#f07bae3f7dc532d9ea5ab36c9071db329f9a1efb" - integrity sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA== - -"@rollup/rollup-linux-x64-musl@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz#357a34fdbf410af88ce48bd802bea6462bb9a8bc" - integrity sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ== - -"@rollup/rollup-win32-arm64-msvc@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz#b6e97fd38281667e35297033393cd1101f4a31be" - integrity sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ== - -"@rollup/rollup-win32-ia32-msvc@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz#a95db026c640c8128bfd38546d85342f2329beaf" - integrity sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw== - -"@rollup/rollup-win32-x64-msvc@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz#45785b5caf83200a34a9867ba50d69560880c120" - integrity sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A== - -"@sentry-internal/tracing@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551" - integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A== - dependencies: - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry/browser@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb" - integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w== - dependencies: - "@sentry-internal/tracing" "7.57.0" - "@sentry/core" "7.57.0" - "@sentry/replay" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry/core@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb" - integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw== - dependencies: - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" - tslib "^2.4.1 || ^1.9.3" +"@rollup/rollup-android-arm-eabi@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" + integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== + +"@rollup/rollup-android-arm64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" + integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== + +"@rollup/rollup-darwin-arm64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" + integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== + +"@rollup/rollup-darwin-x64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" + integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== + +"@rollup/rollup-linux-arm-gnueabihf@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" + integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== + +"@rollup/rollup-linux-arm64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" + integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== + +"@rollup/rollup-linux-arm64-musl@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" + integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== + +"@rollup/rollup-linux-riscv64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" + integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== + +"@rollup/rollup-linux-x64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" + integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== + +"@rollup/rollup-linux-x64-musl@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" + integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== + +"@rollup/rollup-win32-arm64-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" + integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== + +"@rollup/rollup-win32-ia32-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" + integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== + +"@rollup/rollup-win32-x64-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" + integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== + +"@sentry-internal/feedback@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.100.1.tgz#99585ba6f71eca3e7afe918273dd55b12f3aac8a" + integrity sha512-yqcRVnjf+qS+tC4NxOKLJOaSJ+csHmh/dHUzvCTkf5rLsplwXYRnny2r0tqGTQ4tuXMxwgSMKPYwicg81P+xuw== + dependencies: + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry-internal/replay-canvas@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.100.1.tgz#d37228575931b869d2ad415af46b342d83dd0fd7" + integrity sha512-TnqxqJGhbFhhYRhTG2WLFer+lVieV7mNGeIxFBiw1L4kuj8KGl+C0sknssKyZSRVJFSahhHIosHJGRMkkD//7g== + dependencies: + "@sentry/core" "7.100.1" + "@sentry/replay" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry-internal/tracing@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.100.1.tgz#4329492e50c390567197a4acbf7e3672b1db7820" + integrity sha512-+u9RRf5eL3StiyiRyAHZmdkAR7GTSGx4Mt4Lmi5NEtCcWlTGZ1QgW2r8ZbhouVmTiJkjhQgYCyej3cojtazeJg== + dependencies: + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry/browser@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.100.1.tgz#146ffca94cc187ecbf49915ef3100f6037316110" + integrity sha512-IxHQ08ixf0bmaWpe4yt1J4UUsOpg02fxax9z3tOQYXw5MSzz5pDXn8M8DFUVJB3wWuyXhHXTub9yD3VIP9fnoA== + dependencies: + "@sentry-internal/feedback" "7.100.1" + "@sentry-internal/replay-canvas" "7.100.1" + "@sentry-internal/tracing" "7.100.1" + "@sentry/core" "7.100.1" + "@sentry/replay" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry/core@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.100.1.tgz#7b8e101a931af8e8b3b2449534749f882772df4f" + integrity sha512-f+ItUge/o9AjlveQq0ZUbQauKlPH1FIJbC1TRaYLJ4KNfOdrsh8yZ29RmWv0cFJ/e+FGTr603gWpRPObF5rM8Q== + dependencies: + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" "@sentry/react@^7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.57.0.tgz#cf91f0115bcd2a8306d6c8a39d8e8b53d4b21814" - integrity sha512-XGNTjIoCG3naSmCU8qObd+y+CqAB6NQkGWOp2yyBwp2inyKF2ehJvDh6bIQloBYq2TmOJDa4NfXdMrkilxaLFQ== - dependencies: - "@sentry/browser" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.100.1.tgz#a8621f2124848b6a7bb1fc6279167f5e3cbc44f1" + integrity sha512-EdrBtrXVLK2LSx4Rvz/nQP7HZUZQmr+t3GHV8436RAhF6vs5mntACVMBoQJRWiUvtZ1iRo3rIsIdah7DLiFPgQ== + dependencies: + "@sentry/browser" "7.100.1" + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" hoist-non-react-statics "^3.3.2" - tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39" - integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw== +"@sentry/replay@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.100.1.tgz#d9af5f8e92ce0f93cef89f5aef74d91a8d12c3eb" + integrity sha512-B1NFjzGEFaqejxBRdUyEzH8ChXc2kfiqlA/W/Lg0aoWIl2/7nuMk+l4ld9gW5F5bIAXDTVd5vYltb1lWEbpr7w== dependencies: - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + "@sentry-internal/tracing" "7.100.1" + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" -"@sentry/types@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce" - integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w== +"@sentry/types@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.100.1.tgz#1349b77269cecf4e80c087842575bd1a001e9995" + integrity sha512-fLM+LedHuKzOd8IhXBqaQuym+AA519MGjeczBa5kGakes/BbAsUMwsNfjsKQedp7Kh44RgYF99jwoRPK2oDrXw== -"@sentry/utils@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8" - integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg== +"@sentry/utils@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.100.1.tgz#6e26f3b06b1e485a2180f464ab3374ecb8d5e407" + integrity sha512-Ve6dXr1o6xiBe3VCoJgiutmBKrugryI65EZAbYto5XI+t+PjiLLf9wXtEMF24ZrwImo4Lv3E9Uqza+fWkEbw6A== dependencies: - "@sentry/types" "7.57.0" - tslib "^2.4.1 || ^1.9.3" - -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + "@sentry/types" "7.100.1" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -3172,11 +2554,11 @@ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@storybook/addon-actions@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.10.tgz#5b43534e158797114db032f4ad8505a81809ed00" - integrity sha512-pcKmf0H/caGzKDy8cz1adNSjv+KOBWLJ11RzGExrWm+Ad5ACifwlsQPykJ3TQ/21sTd9IXVrE9uuq4LldEnPbg== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.13.tgz#a1675fe2535e76228fa121fa1b30eb274349c0a4" + integrity sha512-uxjBLzJNJfj8oS0orgLt7/Gs5tLoP2xhBESi5vjk+7BZjAgfoA6w5IwMwmh9sRB3+aUx3ks7fGjE/hRT/YcaxA== dependencies: - "@storybook/core-events" "7.6.10" + "@storybook/core-events" "7.6.13" "@storybook/global" "^5.0.0" "@types/uuid" "^9.0.1" dequal "^2.0.2" @@ -3184,106 +2566,97 @@ uuid "^9.0.0" "@storybook/addon-controls@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.6.10.tgz#6cd309440bf2b86c21f11a8b5f20bc1340d6c045" - integrity sha512-LjwCQRMWq1apLtFwDi6U8MI6ITUr+KhxJucZ60tfc58RgB2v8ayozyDAonFEONsx9YSR1dNIJ2Z/e2rWTBJeYA== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.6.13.tgz#18eaf499e8e110b8a88ac209c8e4ea08090066ee" + integrity sha512-NdCEvr9xg3ANOSoEXKnB9jQR74n7G8XFWngnjJqviqXjRxiL7jwv2TCkyJyDTMmIAtPkHKU3NoD2Q1eQk16iYg== dependencies: - "@storybook/blocks" "7.6.10" + "@storybook/blocks" "7.6.13" lodash "^4.17.21" ts-dedent "^2.0.0" "@storybook/addon-docs@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.10.tgz#aab69f253a9cfbb57fd84062f00fac08f9c796cd" - integrity sha512-GtyQ9bMx1AOOtl6ZS9vwK104HFRK+tqzxddRRxhXkpyeKu3olm9aMgXp35atE/3fJSqyyDm2vFtxxH8mzBA20A== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.13.tgz#b90b4a67d7aca2259bbcb90b17245b9f2bb09b4e" + integrity sha512-rRaHPVYuOrpLzk/KGemN/ePengYLL0Vly/Shb+nxcbDnKiraMELWsAkQEvEa/WbPa5sdpRD2+cJTqPcif4Du4g== dependencies: "@jest/transform" "^29.3.1" "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/components" "7.6.10" - "@storybook/csf-plugin" "7.6.10" - "@storybook/csf-tools" "7.6.10" + "@storybook/blocks" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/components" "7.6.13" + "@storybook/csf-plugin" "7.6.13" + "@storybook/csf-tools" "7.6.13" "@storybook/global" "^5.0.0" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.6.10" - "@storybook/postinstall" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/react-dom-shim" "7.6.10" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/node-logger" "7.6.13" + "@storybook/postinstall" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/react-dom-shim" "7.6.13" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" fs-extra "^11.1.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" "@storybook/addon-mdx-gfm@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-7.6.10.tgz#6b71b6d3f8739315b3294564e7e308b7dd3e465f" - integrity sha512-gA1kQZJ4ZKOpi9afu7WRC1twCwZR0J1Nd7u47kNq+5coW1GH9uqGDFYHzr4mfKdD1J09/OrmfMnVjCPx9MYDtQ== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-7.6.13.tgz#542c96fe30d6fe5a94984d69941438aeb9cfeb4c" + integrity sha512-fc+y34MojGYDL9/5cg86tteORd7JTQaMzcfzK23+OIH1Fmy6mpbsFd5lkKOkof0GqvCL+iooS+Xa7IViq0l82w== dependencies: - "@storybook/node-logger" "7.6.10" + "@storybook/node-logger" "7.6.13" remark-gfm "^3.0.1" ts-dedent "^2.0.0" "@storybook/addon-measure@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.6.10.tgz#5e41d64aa6e02b9c6df1696d918058979598250e" - integrity sha512-OVfTI56+kc4hLWfZ/YPV3WKj/aA9e4iKXYxZyPdhfX4Z8TgZdD1wv9Z6e8DKS0H5kuybYrHKHaID5ki6t7qz3w== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.6.13.tgz#26ff632bd7e99857df3f07a3ec46cb697b7b3529" + integrity sha512-WdxEicIy3x79kgP93HMf9hgbbW3h7xo3eNzrTaMsTeoXaolXWN9qdpusm8Cc8vDIP5JMd+gkwi2u563KjggXVQ== dependencies: "@storybook/global" "^5.0.0" tiny-invariant "^1.3.1" "@storybook/addon-storysource@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-7.6.10.tgz#dd277b88069b00d9a325076c2c476a9f8e3f30e2" - integrity sha512-ZtMiO26Bqd2oEovEeJ5ulvIL/rsAuHHpjAgBRZd/Byw25DQKY3GTqGtV474Wjm5tzj7HWhfk69fqAv87HnveCw== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-7.6.13.tgz#2dbfd9d33f28a25513946c2f5071fb9930c4e3f1" + integrity sha512-qnuD5MXUKabLjGbygQG0KThfgoFtfwgPltdGIcYTStrABBnhlkgoOLraX22XRXXGaQaS63tQXuDnbF/Jp0IC+A== dependencies: - "@storybook/source-loader" "7.6.10" + "@storybook/source-loader" "7.6.13" estraverse "^5.2.0" tiny-invariant "^1.3.1" "@storybook/addon-viewport@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.6.10.tgz#834bad76a56e4117ffb2dc935d349dca3b49bcc3" - integrity sha512-+bA6juC/lH4vEhk+w0rXakaG8JgLG4MOYrIudk5vJKQaC6X58LIM9N4kzIS2KSExRhkExXBPrWsnMfCo7uxmKg== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.6.13.tgz#c0bb05584cc191c3079ca34cc10579aeba372ac9" + integrity sha512-yqUCWzp3IY/tlS488k9iAXMgOWW/rTswbVgGEh8alUg38QjbUnh4lKFLtd9Va8Fd1zNeVd9nkpCMTSsGy85uMg== dependencies: memoizerific "^1.11.3" -"@storybook/addons@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.0.7.tgz#cef9a022bcdd14e79d4fc364fb3eb8e44e94ed18" - integrity sha512-it8NWXsdm3dhjc237d9jj7dGJf6eHDfuDv12nirV64J1dzWrnW+lONeZMPMgxxdLlgYfxH52fLgjcw/dAC/E+Q== - dependencies: - "@storybook/manager-api" "7.0.7" - "@storybook/preview-api" "7.0.7" - "@storybook/types" "7.0.7" - -"@storybook/addons@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.10.tgz#dfc8b71581dd38acd6813f2339ade2f299c28c63" - integrity sha512-lv/oT4ZGMKfXh6bB7LbuRP85bwRprBPYuMMl+e1Ikvu5WTfqVoJRYjc7mvXaIHGCI6DZ/nFcbRjra6q8ZhoDgw== - dependencies: - "@storybook/manager-api" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/types" "7.6.10" - -"@storybook/blocks@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.10.tgz#353a5efa6a922a9a3766254f9f24cc2adad34f83" - integrity sha512-oSIukGC3yuF8pojABC/HLu5tv2axZvf60TaUs8eDg7+NiiKhzYSPoMQxs5uMrKngl+EJDB92ESgWT9vvsfvIPg== - dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/components" "7.6.10" - "@storybook/core-events" "7.6.10" +"@storybook/addons@^7.0.0", "@storybook/addons@^7.6.10": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.13.tgz#fda1f435712cbdb6ce8b9c4b7e516589f8ec559d" + integrity sha512-Vu7Su2GT1Sg6F43b01npnMSEALreoNeHPoL3BCJ52/7C4lHNopk4KOeeNbPP9TbVkfbICJi8L/u7MitVZZbhag== + dependencies: + "@storybook/manager-api" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/types" "7.6.13" + +"@storybook/blocks@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.13.tgz#949b6a97ef749f484901d173e59fe88d20ad88d2" + integrity sha512-wjiwGHLIDfzgonxQaEOlQBR8H7U4hjOEkvkT6leaA3SXJaBgoZBD8zTqWqMX1Gl6vUmmRqMzq/nTSVai8Y1vVQ== + dependencies: + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/components" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" - "@storybook/docs-tools" "7.6.10" + "@storybook/docs-tools" "7.6.13" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/manager-api" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" "@types/lodash" "^4.14.167" color-convert "^2.0.1" dequal "^2.0.2" @@ -3297,15 +2670,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-manager@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.10.tgz#fc30b19dd74e6f6ae896d8f4045552c3206c25f9" - integrity sha512-f+YrjZwohGzvfDtH8BHzqM3xW0p4vjjg9u7uzRorqUiNIAAKHpfNrZ/WvwPlPYmrpAHt4xX/nXRJae4rFSygPw== +"@storybook/builder-manager@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.13.tgz#75d9e999810476e7422b532b79e26412876d8bda" + integrity sha512-RsZO7W33fYD5QKr//6DQ2+H0tdOt6BJ9I7U+3k5C8qCCoIW1CwYz/qbX+IB403k1yKKyw+Xau3F3tCVxR3j9Bw== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.6.10" - "@storybook/manager" "7.6.10" - "@storybook/node-logger" "7.6.10" + "@storybook/core-common" "7.6.13" + "@storybook/manager" "7.6.13" + "@storybook/node-logger" "7.6.13" "@types/ejs" "^3.1.1" "@types/find-cache-dir" "^3.2.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" @@ -3319,19 +2692,19 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-vite@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.6.10.tgz#f8a23668a17e7473e4d19465658199c46bf731d7" - integrity sha512-qxe19axiNJVdIKj943e1ucAmADwU42fTGgMSdBzzrvfH3pSOmx2057aIxRzd8YtBRnj327eeqpgCHYIDTunMYQ== - dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/csf-plugin" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/preview" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/types" "7.6.10" +"@storybook/builder-vite@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.6.13.tgz#bc75e8dd8a47a0901cc229da5b3992bdcfb50a63" + integrity sha512-BpOUP1QPS7NeTTTs5i2gUmORtjigo2S6B57Pb08vDyy1/1bd+NpkLvHvdc/TxBBc57FI4TS/7m8NtwIYHtwkcQ== + dependencies: + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/csf-plugin" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/preview" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/types" "7.6.13" "@types/find-cache-dir" "^3.2.1" browser-assert "^1.2.1" es-module-lexer "^0.9.3" @@ -3341,64 +2714,35 @@ magic-string "^0.30.0" rollup "^2.25.0 || ^3.3.0" -"@storybook/channel-postmessage@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-7.0.7.tgz#8b00a45f3a078946169f7222c320d8d1e17b67c2" - integrity sha512-XMtYfcaE0UoY/V7K1cTu9PcWETD4iyWb/Yswc4F9VrPw0Ui4UwGS1j4iaAu8DC06yyoJs4XvxYFBMlCQmKja6A== - dependencies: - "@storybook/channels" "7.0.7" - "@storybook/client-logger" "7.0.7" - "@storybook/core-events" "7.0.7" - "@storybook/global" "^5.0.0" - qs "^6.10.0" - telejson "^7.0.3" - -"@storybook/channels@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.0.7.tgz#3f3962be97b447752db99a78ef7beea9f94d75a4" - integrity sha512-Om4ovBLNw8pVrBu83MpOKgAuGO9Dpr1Coh2qp8t64WRPkejX1mxOY9IgH723//zH3igx8LCkf9rvBvcrsyaScQ== - -"@storybook/channels@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.10.tgz#04fd2c2f0b530bb8d236f5763e8df8cb5fa7c921" - integrity sha512-ITCLhFuDBKgxetuKnWwYqMUWlU7zsfH3gEKZltTb+9/2OAWR7ez0iqU7H6bXP1ridm0DCKkt2UMWj2mmr9iQqg== - dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/core-events" "7.6.10" - "@storybook/global" "^5.0.0" - qs "^6.10.0" - telejson "^7.2.0" - tiny-invariant "^1.3.1" - -"@storybook/channels@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.4.tgz#d0af47f1f049c3ad77bcdefec54253f56b3b0a47" - integrity sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA== +"@storybook/channels@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.13.tgz#4d60407ecab0cfb99184fc230fec237d1df019c2" + integrity sha512-AiplFJXPjgHA62xqZFq7SwCS+o8bFrYLPM9I8yNY+8jhAi9N3Yig+h2P0jOXxLKicwrCXa5ZJ7PZK05M1r6YqA== dependencies: - "@storybook/client-logger" "7.6.4" - "@storybook/core-events" "7.6.4" + "@storybook/client-logger" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/global" "^5.0.0" qs "^6.10.0" telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/cli@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.10.tgz#2436276c5404b166a9f795fef44bbd75826d9bfe" - integrity sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ== +"@storybook/cli@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.13.tgz#3fa2761adb7522b119f83f76286ddc79d7a519f2" + integrity sha512-9JBFckdWeJKU1xV3G3+L/kjuwNZm2RAUxac4GgVBxXACF0QU0nXml8Ss5ZA5nss+qCnn/gdRYRDNdfJ28L0/mw== dependencies: "@babel/core" "^7.23.2" "@babel/preset-env" "^7.23.2" "@babel/types" "^7.23.0" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/core-events" "7.6.10" - "@storybook/core-server" "7.6.10" - "@storybook/csf-tools" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/telemetry" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/codemod" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/core-events" "7.6.13" + "@storybook/core-server" "7.6.13" + "@storybook/csf-tools" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/telemetry" "7.6.13" + "@storybook/types" "7.6.13" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" @@ -3429,46 +2773,32 @@ util-deprecate "^1.0.2" "@storybook/client-api@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.6.10.tgz#5fd95488cbfcaec3535a414fd94374ce0ecba063" - integrity sha512-Y9z6Uy4h3/hDAUVBEEGLLbbvnSKQJhr4Sn1wJ328PhMppcZ1+GW1iGphFBmthm+O0cun1Zevl18Y081kqiGzSQ== - dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/preview-api" "7.6.10" - -"@storybook/client-logger@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.0.7.tgz#1f91eb2785111c94b7946bda2d32199c11045d71" - integrity sha512-EclHjDs5HwHMKB4X2orn/KKA0DTIDmp4AXAUJGRfxb5ArpKEb7tXLHsgrRBlaoz1j5LAwKTmEyZOONh9G3etjg== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/client-logger@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.10.tgz#5d66feb18a21836f84b63f71cf5b3a85d669f049" - integrity sha512-U7bbpu21ntgePMz/mKM18qvCSWCUGCUlYru8mgVlXLCKqFqfTeP887+CsPEQf29aoE3cLgDrxqbRJ1wxX9kL9A== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.6.13.tgz#2d8efffde6572e3e6407772a16f8ead2d0bccfcd" + integrity sha512-95u4Uip0/LNA0xuX9Tg60zCfFuqtYPVn5nvFd3IRZaUewhsioe5lfDSkbmVPycGZq3V8vKC9buaIBTxgoyKh7Q== dependencies: - "@storybook/global" "^5.0.0" + "@storybook/client-logger" "7.6.13" + "@storybook/preview-api" "7.6.13" -"@storybook/client-logger@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.4.tgz#7533f5194903f554c297b0d327efee04c5accfbb" - integrity sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ== +"@storybook/client-logger@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.13.tgz#bcba58e9a7ad706ca7309d50854a09ec04687f34" + integrity sha512-uo51MsUG1Fbi1IA+me9tewF1mFiaYuyR0IMeBmaU3Z3CtjEUdOekmvRQ9ckoFn+BbKtxSipTodiR4HmIZDta3g== dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.10.tgz#21cc0e69df6f57d567fc27264310f820662d62fa" - integrity sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw== +"@storybook/codemod@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.13.tgz#97cfdaa3b0bfa71db85bf1eaa05e22f20eef13b7" + integrity sha512-QjjVAxT/NnCN4hJ5TLf2wQtddfwn9r0yaFMxLb3gGsjW/ZVzmp4xOS5KeqUUXXbb1wjYWv56Egamkrs/qoUTyA== dependencies: "@babel/core" "^7.23.2" "@babel/preset-env" "^7.23.2" "@babel/types" "^7.23.0" "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/csf-tools" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/types" "7.6.13" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" globby "^11.0.2" @@ -3477,52 +2807,38 @@ prettier "^2.8.0" recast "^0.23.1" -"@storybook/components@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.10.tgz#2d1b8c66c374327663b91f65db3b1be5749a1a6b" - integrity sha512-H5hF8pxwtbt0LxV24KMMsPlbYG9Oiui3ObvAQkvGu6q62EYxRPeNSrq3GBI5XEbI33OJY9bT24cVaZx18dXqwQ== +"@storybook/components@7.6.13", "@storybook/components@^7.0.0": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.13.tgz#a9792015c7190f2a1e5ae0f5f847bb509d9450e4" + integrity sha512-IkUermvJFOCooJwlR1mamnByjSGukKjkmFGue6HWc64cZ+/DTwgHzh9O/XV82fnfTTMJ2CjOFYlYVr3brDqTVg== dependencies: "@radix-ui/react-select" "^1.2.2" "@radix-ui/react-toolbar" "^1.0.4" - "@storybook/client-logger" "7.6.10" + "@storybook/client-logger" "7.6.13" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" memoizerific "^1.11.3" use-resize-observer "^9.1.0" util-deprecate "^1.0.2" -"@storybook/components@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.0.7.tgz#3b4829e8287e81a6850417c40f6f28e6ea5580bc" - integrity sha512-6PLs9LMkBuhH/w4bSJ72tYgICMbOOIHuoB/fQdVlzhsdnXL2fM/v4RVW2N7v+Oz3lYXp/JtV8V9Ub8h6eDQKXg== +"@storybook/core-client@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.13.tgz#733307f75f1925b136627bcb9f701d390a1ec824" + integrity sha512-6tzWZ5u/8YXSthVuBqDHGABqALsiv/h+IiYaeg+UPWgz7sYwyj/IoFlHN1/du/h1wV5bc8GZyPcAIrOHxF60rQ== dependencies: - "@storybook/client-logger" "7.0.7" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/theming" "7.0.7" - "@storybook/types" "7.0.7" - memoizerific "^1.11.3" - use-resize-observer "^9.1.0" - util-deprecate "^1.0.2" + "@storybook/client-logger" "7.6.13" + "@storybook/preview-api" "7.6.13" -"@storybook/core-client@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.10.tgz#cd427d7017c1f32b2e956b4eb8ea89f3424b60c9" - integrity sha512-DjnzSzSNDmZyxyg6TxugzWQwOsW+n/iWVv6sHNEvEd5STr0mjuJjIEELmv58LIr5Lsre5+LEddqHsyuLyt8ubg== +"@storybook/core-common@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.13.tgz#46b47cce8f563a4542e9d5a9128733bc2229469d" + integrity sha512-kCCVDga/66wIWFSluT3acD3/JT3vwV7A9rxG8FZF5K38quU/b37sRXvCw8Yk5HJ4rQhrB76cxVhIOy/ZucaZVw== dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/preview-api" "7.6.10" - -"@storybook/core-common@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.10.tgz#00b73761eb3c4452105a7d79b5179237a6f01b32" - integrity sha512-K3YWqjCKMnpvYsWNjOciwTH6zWbuuZzmOiipziZaVJ+sB1XYmH52Y3WGEm07TZI8AYK9DRgwA13dR/7W0nw72Q== - dependencies: - "@storybook/core-events" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/core-events" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/types" "7.6.13" "@types/find-cache-dir" "^3.2.1" "@types/node" "^18.0.0" "@types/node-fetch" "^2.6.4" @@ -3544,45 +2860,33 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/core-events@7.0.7", "@storybook/core-events@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.0.7.tgz#9acb6425d0a2a3d25becc21980c2c678c6c5548e" - integrity sha512-XNsR2RgaL2vBwuqsu+KA1DzGmB1UFfrAhpxhmyWTKDCniwtTLlaXgfKbqwcrOrPu/o1YswgIup/9UHepRHaf4A== - -"@storybook/core-events@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.10.tgz#d521cbdadebfa56caaa8815a1e132694a20f05e9" - integrity sha512-yccDH67KoROrdZbRKwxgTswFMAco5nlCyxszCDASCLygGSV2Q2e+YuywrhchQl3U6joiWi3Ps1qWu56NeNafag== - dependencies: - ts-dedent "^2.0.0" - -"@storybook/core-events@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.4.tgz#55405545dbc9ae5715654d2198ee1f1a3cc34ef7" - integrity sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ== +"@storybook/core-events@7.6.13", "@storybook/core-events@^7.0.0": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.13.tgz#772834ebf72f1fda339d7152566f051ac38394b9" + integrity sha512-hsL6JT273b1RcJBGHpNNLJ1ilzFMT4UCJwwtOpNNQVPBJt0Hn22vxC69/hpqSINrhHRLj3ak8CTtA0ynVjngaQ== dependencies: ts-dedent "^2.0.0" -"@storybook/core-server@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.10.tgz#53bf43b8b3c999c87196774a0b92e2e10a434e4c" - integrity sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw== +"@storybook/core-server@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.13.tgz#66116d3c8cd5965e40a246f0eabc4313ec29781a" + integrity sha512-kcHhCL8XDv4k5QJqBVWOYJ2lwX6orQHnx0N7fvLhJ7IHtUp1YQYn1+ufnGFZBlpNGGvPwz3oX4hmOT1G+PQdlw== dependencies: "@aw-web-design/x-default-browser" "1.4.126" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.6.10" - "@storybook/channels" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/core-events" "7.6.10" + "@storybook/builder-manager" "7.6.13" + "@storybook/channels" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.10" + "@storybook/csf-tools" "7.6.13" "@storybook/docs-mdx" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/telemetry" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/manager" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/telemetry" "7.6.13" + "@storybook/types" "7.6.13" "@types/detect-port" "^1.3.0" "@types/node" "^18.0.0" "@types/pretty-hrtime" "^1.0.0" @@ -3610,25 +2914,25 @@ watchpack "^2.2.0" ws "^8.2.3" -"@storybook/csf-plugin@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.10.tgz#479cffe04c68a87f60589a6891a306805c758437" - integrity sha512-Sc+zZg/BnPH2X28tthNaQBnDiFfO0QmfjVoOx0fGYM9SvY3P5ehzWwp5hMRBim6a/twOTzePADtqYL+t6GMqqg== +"@storybook/csf-plugin@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.13.tgz#8585d9c61b9627c46e0a8e7daf60560eddef41b9" + integrity sha512-ZTyAao/W8Aob6wT1nC4cTfBjWAT9FN0Y9nzairbvNOiqRkAvk3w/02K4BauESHYMm06QC8Pg0tzS1s+tWJtRRQ== dependencies: - "@storybook/csf-tools" "7.6.10" + "@storybook/csf-tools" "7.6.13" unplugin "^1.3.1" -"@storybook/csf-tools@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.10.tgz#320638f64e2e14cf539dd55188f676fd82789be5" - integrity sha512-TnDNAwIALcN6SA4l00Cb67G02XMOrYU38bIpFJk5VMDX2dvgPjUtJNBuLmEbybGcOt7nPyyFIHzKcY5FCVGoWA== +"@storybook/csf-tools@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.13.tgz#c7a59063d6151b44760183d283e2996cf9d24e95" + integrity sha512-N0erD3fhbZIDkQpcHlNTLvkpWVVtpiOjY3JO8B5SdBT2uQ8T7aXx7IEM3Q8g1f/BpfjkM15rZl9r4HFtm5E43Q== dependencies: "@babel/generator" "^7.23.0" "@babel/parser" "^7.23.0" "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.10" + "@storybook/types" "7.6.13" fs-extra "^11.1.0" recast "^0.23.1" ts-dedent "^2.0.0" @@ -3640,13 +2944,6 @@ dependencies: lodash "^4.17.15" -"@storybook/csf@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.0.tgz#62315bf9704f3aa4e0d4d909b9033833774ddfbe" - integrity sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ== - dependencies: - type-fest "^2.19.0" - "@storybook/csf@^0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.2.tgz#8e7452f0097507f5841b5ade3f5da1525bc9afb2" @@ -3659,14 +2956,14 @@ resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== -"@storybook/docs-tools@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.10.tgz#90ce6bcf468b8d0a479fb75e9a6ff87f482095dc" - integrity sha512-UgbikducoXzqQHf2TozO0f2rshaeBNnShVbL5Ai4oW7pDymBmrfzdjGbF/milO7yxNKcoIByeoNmu384eBamgQ== +"@storybook/docs-tools@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.13.tgz#0e5ec2b3054f1435d144e21aa7390374427c17bc" + integrity sha512-m3YAyNRQ97vm/rLj48Lgg8jjhbjr+668aADU49S50zjwtvC7H9C0h8PJI3LyE1Owxg2Ld2B6bG5wBv30nPnxZg== dependencies: - "@storybook/core-common" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/core-common" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/types" "7.6.13" "@types/doctrine" "^0.0.3" assert "^2.1.0" doctrine "^3.0.0" @@ -3677,40 +2974,19 @@ resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== -"@storybook/manager-api@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.0.7.tgz#0b3a839f4c48c84424ce0462739afb5c7e08d1b7" - integrity sha512-QTd/P72peAhofKqK+8yzIO9iWAEfPn8WUGGveV2KGaTlSlgbr87RLHEKilcXMZcYhBWC9izFRmjKum9ROdskrQ== - dependencies: - "@storybook/channels" "7.0.7" - "@storybook/client-logger" "7.0.7" - "@storybook/core-events" "7.0.7" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/router" "7.0.7" - "@storybook/theming" "7.0.7" - "@storybook/types" "7.0.7" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - semver "^7.3.7" - store2 "^2.14.2" - telejson "^7.0.3" - ts-dedent "^2.0.0" - -"@storybook/manager-api@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.10.tgz#0c2932f42bb97de8fb25240844fcf64474fc8905" - integrity sha512-8eGVpRlpunuFScDtc7nxpPJf/4kJBAAZlNdlhmX09j8M3voX6GpcxabBamSEX5pXZqhwxQCshD4IbqBmjvadlw== +"@storybook/manager-api@7.6.13", "@storybook/manager-api@^7.0.0": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.13.tgz#6cfe52b05b4d68406175008bc2837908089157d8" + integrity sha512-D23lbJSmJnVGHwXzKEw3TeUbPZMDP03R5Pp4S73fWHHhSBqjadcGCGRxiFWOyCyGXi4kUg1q4TYSIMw0pHvnlg== dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/core-events" "7.6.10" + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/router" "7.6.10" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/router" "7.6.13" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" @@ -3718,79 +2994,37 @@ telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager-api@^7.0.0": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.4.tgz#edf5d553a78987ad8602700b7200391776010f48" - integrity sha512-RFb/iaBJfXygSgXkINPRq8dXu7AxBicTGX7MxqKXbz5FU7ANwV7abH6ONBYURkSDOH9//TQhRlVkF5u8zWg3bw== - dependencies: - "@storybook/channels" "7.6.4" - "@storybook/client-logger" "7.6.4" - "@storybook/core-events" "7.6.4" - "@storybook/csf" "^0.1.2" - "@storybook/global" "^5.0.0" - "@storybook/router" "7.6.4" - "@storybook/theming" "7.6.4" - "@storybook/types" "7.6.4" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - semver "^7.3.7" - store2 "^2.14.2" - telejson "^7.2.0" - ts-dedent "^2.0.0" - -"@storybook/manager@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.10.tgz#eb1b71c802fbf04353f3bf017dfb102eb0db217e" - integrity sha512-Co3sLCbNYY6O4iH2ggmRDLCPWLj03JE5s/DOG8OVoXc6vBwTc/Qgiyrsxxp6BHQnPpM0mxL6aKAxE3UjsW/Nog== +"@storybook/manager@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.13.tgz#1793fc3c562984c8dbe7ade1ec3314a5675705d0" + integrity sha512-f/Qecur8pXSncdmll7dYyP8EZ+IzzReIN8eZF/NHKULfnBkIkRxf+w4LlXBgOwgU36DdsW+VH0OuGMWeeqTUwA== "@storybook/mdx2-csf@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.0.0.tgz#ce4b2e44c9082bf382db835eef611b0097b7d771" - integrity sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw== - -"@storybook/node-logger@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.10.tgz#d4c52d04384d2728d6610fb0afff6eb1feb50fd4" - integrity sha512-ZBuqrv4bjJzKXyfRGFkVIi+z6ekn6rOPoQao4KmsfLNQAUUsEdR8Baw/zMnnU417zw5dSEaZdpuwx75SCQAeOA== - -"@storybook/postinstall@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.10.tgz#9e81c54b1f23f71a59a6db7ee8a4d5ac40852d17" - integrity sha512-SMdXtednPCy3+SRJ7oN1OPN1oVFhj3ih+ChOEX8/kZ5J3nfmV3wLPtsZvFGUCf0KWQEP1xL+1Urv48mzMKcV/w== - -"@storybook/preview-api@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.0.7.tgz#8f8da37418d91dd3d9009df914cb26add87a8e67" - integrity sha512-R5pmGTodpu6hbwEg2RM2ulWtW3d426YzsisHrZJ+FT9lecWauN1y9xHCz7HdNzEFhT8r4YOa24L9ZS3mosZ7hA== - dependencies: - "@storybook/channel-postmessage" "7.0.7" - "@storybook/channels" "7.0.7" - "@storybook/client-logger" "7.0.7" - "@storybook/core-events" "7.0.7" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/types" "7.0.7" - "@types/qs" "^6.9.5" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - qs "^6.10.0" - synchronous-promise "^2.0.15" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/preview-api@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.10.tgz#b8d5a4f897745fc28f0ae75f7e0e9278b0e4a50a" - integrity sha512-5A3etoIwZCx05yuv3KSTv1wynN4SR4rrzaIs/CTBp3BC4q1RBL+Or/tClk0IJPXQMlx/4Y134GtNIBbkiDofpw== - dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/core-events" "7.6.10" + version "1.1.0" + resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" + integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== + +"@storybook/node-logger@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.13.tgz#bab8256bafa7f54be7d2465db8a72d5f73cec679" + integrity sha512-Ci/2Gd0+Qd3fX6GWGS1UAa/bTl0uALsEuMuzOO0meKEPEEYZvBFCoeK6lP1ysMnxWxKaDjxNr01JlTpmjfT6ag== + +"@storybook/postinstall@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.13.tgz#31aefcd7f18d7e85e8837265b01665853a480841" + integrity sha512-6NohciDuEPWSjMrUfhFjawfFUCvR70IDtAjjYhfXlSesyt06fXqbht1VrKhSsRjvwzbhYeiza5Uh/ujvSgxeGg== + +"@storybook/preview-api@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.13.tgz#ace76ab343ef01328d8244264749913345979d6f" + integrity sha512-BbRlVpxgOXSe4/hpf9cRtbvvCJoRrFbjMCnmaDh+krd8O4wLbVknKhqgSR46qLyW/VGud9Rb3upakz7tNP+mtg== + dependencies: + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/types" "7.6.10" + "@storybook/types" "7.6.13" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -3800,41 +3034,41 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.10.tgz#895053c97f7e09141c6321fa42390fa8af377bef" - integrity sha512-F07BzVXTD3byq+KTWtvsw3pUu3fQbyiBNLFr2CnfU4XSdLKja5lDt8VqDQq70TayVQOf5qfUTzRd4M6pQkjw1w== +"@storybook/preview@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.13.tgz#473a625be3ed7c46a15e922ed568b485074fc472" + integrity sha512-XW8+6PRVC/AfdY4Vf67XFNu9bNi5AwyLnLz7v+H4VEv+AnalRDXuszQcT6rUEumDDsDx2uwAhVs19xaQyAJu/w== -"@storybook/react-dom-shim@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.10.tgz#d16df5d65a51ed66df92430d8f51d50bd177f2c2" - integrity sha512-M+N/h6ximacaFdIDjMN2waNoWwApeVYTpFeoDppiFTvdBTXChyIuiPgYX9QSg7gDz92OaA52myGOot4wGvXVzg== +"@storybook/react-dom-shim@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.13.tgz#7309a55f65749098984461f04f2b2ee6d27f74f9" + integrity sha512-8nrys2WAFymVjywM4GrqVL1fxTfgjWkONJuH7eBbVE2SmgG87NN4lchG/V+TpkFOTkYnGwJRqUcWSqRBUoHLrg== "@storybook/react-vite@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.10.tgz#d69e1e8c9043bbc5e856bb09f07bb3a8b361fd93" - integrity sha512-YE2+J1wy8nO+c6Nv/hBMu91Edew3K184L1KSnfoZV8vtq2074k1Me/8pfe0QNuq631AncpfCYNb37yBAXQ/80w== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.13.tgz#bf25917ed4560759c82f335e8baab6df4d210771" + integrity sha512-swdHnDXzGD0SCxlLqTS1QgjnmNgz8yLTuuQIM8uoMD8/Obeb/zp19Xj+tGr9LIL7u8/tspKJAyDUf9HVyh18lQ== dependencies: "@joshwooding/vite-plugin-react-docgen-typescript" "0.3.0" "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "7.6.10" - "@storybook/react" "7.6.10" + "@storybook/builder-vite" "7.6.13" + "@storybook/react" "7.6.13" "@vitejs/plugin-react" "^3.0.1" magic-string "^0.30.0" react-docgen "^7.0.0" -"@storybook/react@7.6.10", "@storybook/react@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.10.tgz#aca5c446f43de75981f19d112a8a04d7abd0a03d" - integrity sha512-wwBn1cg2uZWW4peqqBjjU7XGmFq8HdkVUtWwh6dpfgmlY1Aopi+vPgZt7pY9KkWcTOq5+DerMdSfwxukpc3ajQ== +"@storybook/react@7.6.13", "@storybook/react@^7.6.10": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.13.tgz#0e146fe49651d9fbc16ffc7439040e00228996f8" + integrity sha512-DjA2uyiUnDT6w0ibzsq++5z6V49bNURfuXUmPbqe6dAPvoKtMFgrT/7h+LN/0PnLe9MKhFXKpmHyUwjAQLS1QA== dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/core-client" "7.6.10" - "@storybook/docs-tools" "7.6.10" + "@storybook/client-logger" "7.6.13" + "@storybook/core-client" "7.6.13" + "@storybook/docs-tools" "7.6.13" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.6.10" - "@storybook/react-dom-shim" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/preview-api" "7.6.13" + "@storybook/react-dom-shim" "7.6.13" + "@storybook/types" "7.6.13" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^18.0.0" @@ -3850,333 +3084,216 @@ type-fest "~2.19" util-deprecate "^1.0.2" -"@storybook/router@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.0.7.tgz#9f60dc63f083b3a24e40e2461cc18eb531dfd451" - integrity sha512-/lM8/NHQKeshfnC3ayFuO8Y9TCSHnCAPRhIsVxvanBzcj+ILbCIyZ+TspvB3hT4MbX/Ez+JR8VrMbjXIGwmH8w== - dependencies: - "@storybook/client-logger" "7.0.7" - memoizerific "^1.11.3" - qs "^6.10.0" - -"@storybook/router@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.10.tgz#b1f2c550eeb9f7146eefa33c5460e4149a62d721" - integrity sha512-G/H4Jn2+y8PDe8Zbq4DVxF/TPn0/goSItdILts39JENucHiuGBCjKjSWGBe1rkwKi1tUbB3yhxJVrLagxFEPpQ== - dependencies: - "@storybook/client-logger" "7.6.10" - memoizerific "^1.11.3" - qs "^6.10.0" - -"@storybook/router@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.4.tgz#13112bd9d6709bebe4072d923e4921b660f8f00c" - integrity sha512-5MQ7Z4D7XNPN2yhFgjey7hXOYd6s8CggUqeAwhzGTex90SMCkKHSz1hfkcXn1ZqBPaall2b53uK553OvPLp9KQ== +"@storybook/router@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.13.tgz#aceb9823cd5611066f6cccc6ec8453b669746e79" + integrity sha512-PE912SaViaq3SlheKMz0IW+/MIUmQpxf77YUOb3ZlMvu2KVhdZFsi9xC/3ym67nuVuF1yLELpz4Q/G1Jxlh/sg== dependencies: - "@storybook/client-logger" "7.6.4" + "@storybook/client-logger" "7.6.13" memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/source-loader@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.6.10.tgz#fe214f6323a27c14b85b6beb573a9ddb38d8cb35" - integrity sha512-S3nOWyj+sdpsqJqKGIN3DKE1q+Q0KYxEyPlPCawMFazozUH7tOodTIqmHBqJZCSNqdC4M1S/qcL8vpP4PfXhuA== +"@storybook/source-loader@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.6.13.tgz#d24af2a43ec2c13c8e1f3c7cf81dbc3049c7efee" + integrity sha512-mPQWmnbtojjFWWFTQ1tThpM+VzjBllqUp6mhzXTohoWdnvxjR9b5NDVj5dRR4U/FgYxpzMpoa3jk2tJFGwMDzg== dependencies: "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.10" + "@storybook/types" "7.6.13" estraverse "^5.2.0" lodash "^4.17.21" prettier "^2.8.0" -"@storybook/telemetry@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.10.tgz#31c0edfb9c7005cf9b5922e51ca896218e3d81ea" - integrity sha512-p3mOSUtIyy2tF1z6pQXxNh1JzYFcAm97nUgkwLzF07GfEdVAPM+ftRSLFbD93zVvLEkmLTlsTiiKaDvOY/lQWg== +"@storybook/telemetry@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.13.tgz#88f24a900497c20267484b51dc7be214e1fc0ac9" + integrity sha512-G23QTpCd3W83NISTFSFjq5SyePRaQUin7F9KnafJM54cMDya7xi7aPUrlVRc5zi2Gfr8PJ8tTna1C4k3cIrHFw== dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/csf-tools" "7.6.10" + "@storybook/client-logger" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/csf-tools" "7.6.13" chalk "^4.1.0" - detect-package-manager "^2.0.1" - fetch-retry "^5.0.2" - fs-extra "^11.1.0" - read-pkg-up "^7.0.1" - -"@storybook/theming@7.0.7", "@storybook/theming@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.0.7.tgz#263c162825e3c0ff4eb53e204e586077e596037e" - integrity sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA== - dependencies: - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.0.7" - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - -"@storybook/theming@7.6.10", "@storybook/theming@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.10.tgz#c09d66d19f5756964cc89b1f94051545fc4aaea7" - integrity sha512-f5tuy7yV3TOP3fIboSqpgLHy0wKayAw/M8HxX0jVET4Z4fWlFK0BiHJabQ+XEdAfQM97XhPFHB2IPbwsqhCEcQ== - dependencies: - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.6.10" - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" + detect-package-manager "^2.0.1" + fetch-retry "^5.0.2" + fs-extra "^11.1.0" + read-pkg-up "^7.0.1" -"@storybook/theming@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.4.tgz#cc81d0aee5fc80fe383cb6790e3a0e2ad80d2185" - integrity sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA== +"@storybook/theming@7.6.13", "@storybook/theming@^7.0.0", "@storybook/theming@^7.6.10": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.13.tgz#9026cf418101f7532da79e3684ac444e5daa6f2f" + integrity sha512-Dj+zVF2CVdTrynjSW3Iydajc8EKCQCYNYA3bpkid0LltAIe8mLTkuTBYiI5CgviWmQc55iBrNpF2MA5AzW5Q3Q== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.6.4" + "@storybook/client-logger" "7.6.13" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/types@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.7.tgz#e42ab7e44b3d7d49f50592f0d9d03023f44af079" - integrity sha512-v9piuwp8FvTiHXIOOi5lEyTEJKhnbcbhVxgJ3VFhhXYFd0DTz6Bst0XIIgkgs21ITb3xhkfPbCRUueMcbXO1MA== - dependencies: - "@storybook/channels" "7.0.7" - "@types/babel__core" "^7.0.0" - "@types/express" "^4.7.0" - file-system-cache "^2.0.0" - -"@storybook/types@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.10.tgz#20cfb2dfeba2ecf54721de131276041d073fe42e" - integrity sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ== +"@storybook/types@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.13.tgz#4d957ac6ddb2213b90525b28b8548749899c2f18" + integrity sha512-N8HfqhL5uaI69BZx+xLkKi1YIgDp34XeL3uhxii4NfThcY1KJA643Gqk3oLKefiBqBpIRGKN0nA41Fhdvhr7Hw== dependencies: - "@storybook/channels" "7.6.10" + "@storybook/channels" "7.6.13" "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" file-system-cache "2.3.0" -"@storybook/types@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.4.tgz#3bb50b46286cc83484848c3c450c32cc2071eb21" - integrity sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg== - dependencies: - "@storybook/channels" "7.6.4" - "@types/babel__core" "^7.0.0" - "@types/express" "^4.7.0" - file-system-cache "2.3.0" - -"@svgr/babel-plugin-add-jsx-attribute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" - integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== -"@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" - integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== -"@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" - integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== -"@svgr/babel-plugin-replace-jsx-attribute-value@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz#7e72f44ee57fdbcb02fb0d4a7629466c5242725e" - integrity sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA== +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== -"@svgr/babel-plugin-svg-dynamic-title@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz#8caf0449c678ea29be756b89960b2b16c9f33f00" - integrity sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w== +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== -"@svgr/babel-plugin-svg-em-dimensions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz#4db6b5af6d29e93db236b1a013fa953754071d41" - integrity sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA== +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== -"@svgr/babel-plugin-transform-react-native-svg@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz#236995e58b5e36ff06365d5310509ce5391aeec9" - integrity sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ== +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== -"@svgr/babel-plugin-transform-svg-component@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz#a9b62730acf10d22a2aa57e0f701c0ecbc270430" - integrity sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A== +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== -"@svgr/babel-preset@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-7.0.0.tgz#55aaca4cec2ff6515a571715b6b6fa98675b66d9" - integrity sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^7.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^7.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^7.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^7.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^7.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^7.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^7.0.0" - "@svgr/babel-plugin-transform-svg-component" "^7.0.0" - -"@svgr/core@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-7.0.0.tgz#def863d2670c682615583c80b408e83c095c2233" - integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== dependencies: "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" + "@svgr/babel-preset" "8.1.0" camelcase "^6.2.0" cosmiconfig "^8.1.3" + snake-case "^3.0.4" -"@svgr/hast-util-to-babel-ast@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz#d457dfbe74ebc1e5a6daf97ded49e9576a3a00cf" - integrity sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ== +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: "@babel/types" "^7.21.3" entities "^4.4.0" -"@svgr/plugin-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz#b9e0c7d05bc890d70163ac0490ba8c41f1afab90" - integrity sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw== +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" - "@svgr/hast-util-to-babel-ast" "^7.0.0" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" -"@swc/core-darwin-arm64@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz#f582c5bbc9c49506f728fc1d14dff33c2cc226d5" - integrity sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw== - -"@swc/core-darwin-arm64@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.36.tgz#37f15d0edda0e78837bdab337d69777d2fecfa40" - integrity sha512-lsP+C8p9cC/Vd9uAbtxpEnM8GoJI/MMnVuXak7OlxOtDH9/oTwmAcAQTfNGNaH19d2FAIRwf+5RbXCPnxa2Zjw== - -"@swc/core-darwin-x64@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz#d84f5c0bb4603c252884d011a698ed7c634b1505" - integrity sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA== - -"@swc/core-darwin-x64@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.36.tgz#da6327511b62a78c2992749dd9ed813a9345608b" - integrity sha512-jaLXsozWN5xachl9fPxDMi5nbWq1rRxPAt6ISeiYB6RJk0MQKH1634pOweBBem2pUDDzwDFXFw6f22LTm/cFvA== - -"@swc/core-linux-arm-gnueabihf@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.36.tgz#4272d94f376e5b90e6453d56f52f2618e2f7b825" - integrity sha512-vcBdTHjoEpvJDbFlgto+S6VwAHzLA9GyCiuNcTU2v4KNQlFzhbO4A4PMfMCb/Z0RLJEr16tirfHdWIxjU3h8nw== - -"@swc/core-linux-arm64-gnu@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz#1ed4b92b373882d8f338c4e0a0aa64cdaa6106f1" - integrity sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw== - -"@swc/core-linux-arm64-gnu@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.36.tgz#d5c39fa52803ec0891c861588e5c4deb89652f63" - integrity sha512-o7f5OsvwWppJo+qIZmrGO5+XC6DPt6noecSbRHjF6o1YAcR13ETPC14k1eC9H1YbQwpyCFNVAFXyNcUbCeQyrQ== - -"@swc/core-linux-arm64-musl@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz#9db560f7459e42e65ec02670d6a8316e7c850cfc" - integrity sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA== - -"@swc/core-linux-arm64-musl@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.36.tgz#2a47ba9b438790f2e32584ca0698ef053cc3ddba" - integrity sha512-FSHPngMi3c0fuGt9yY2Ubn5UcELi3EiPLJxBSC3X8TF9atI/WHZzK9PE9Gtn0C/LyRh4CoyOugDtSOPzGYmLQg== - -"@swc/core-linux-x64-gnu@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz#228826ea48879bf1e73683fbef4373e3e762e424" - integrity sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA== - -"@swc/core-linux-x64-gnu@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.36.tgz#5e239123452231092eac7d6bd007949b5a7e38fb" - integrity sha512-PHSsH2rek5pr3e0K09VgWAbrWK2vJhaI7MW9TPoTjyACYjcs3WwjcjQ30MghXUs2Dc/bXjWAOi9KFTjq/uCyFg== - -"@swc/core-linux-x64-musl@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz#09a234dbbf625d071ecb663680e997a62d230d49" - integrity sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ== - -"@swc/core-linux-x64-musl@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.36.tgz#ed2a26e32d4d4e6f7cbf9f34d50cd38feb78d8dd" - integrity sha512-4LfMYQHzozHCKkIcmQy83b+4SpI+mOp6sYNbXqSRz5dYvTVjegKZXe596P1U/87cK2cgR4uYvkgkgBXquaWvwQ== - -"@swc/core-win32-arm64-msvc@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz#add1c82884c10a9054ed6a48f884097aa85c6d2b" - integrity sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw== - -"@swc/core-win32-arm64-msvc@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.36.tgz#d8fbba50bfbf5e39aa4826c8c46978c4b1fdfbe7" - integrity sha512-7y3dDcun79TAjCyk3Iv0eOMw1X/KNQbkVyKOGqnEgq9g22F8F1FoUGKHNTzUqVdzpHeJSsHgW5PlkEkl3c/d9w== - -"@swc/core-win32-ia32-msvc@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz#e0b6c5ae7f3250adeeb88dae83558d3f45148c56" - integrity sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A== - -"@swc/core-win32-ia32-msvc@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.36.tgz#108830d0282a80d0f2d77bee7773d2985d389346" - integrity sha512-zK0VR3B4LX5hzQ+7eD+K+FkxJlJg5Lo36BeahMzQ+/i0IURpnuyFlW88sdkFkMsc2swdU6bpvxLZeIRQ3W4OUg== - -"@swc/core-win32-x64-msvc@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz#34721dff151d7dcf165675f18aeed0a12264d88c" - integrity sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ== - -"@swc/core-win32-x64-msvc@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.36.tgz#96d9b1077a6877f6583f5d7405f8b9380b9364fc" - integrity sha512-2bIjr9DhAckGiXZEvj6z2z7ECPcTimG+wD0VuQTvr+wkx46uAJKl5Kq+Zk+dd15ErL7JGUtCet1T7bf1k4FwvQ== - -"@swc/core@^1.3.1": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.36.tgz#c82fd4e7789082aeff47a622ef3701fffaf835e7" - integrity sha512-Ogrd9uRNIj7nHjXxG66UlKBIcXESUenJ7OD6K2a8p82qlg6ne7Ne5Goiipm/heHYhSfVmjcnRWL9ZJ4gv+YCPA== - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.36" - "@swc/core-darwin-x64" "1.3.36" - "@swc/core-linux-arm-gnueabihf" "1.3.36" - "@swc/core-linux-arm64-gnu" "1.3.36" - "@swc/core-linux-arm64-musl" "1.3.36" - "@swc/core-linux-x64-gnu" "1.3.36" - "@swc/core-linux-x64-musl" "1.3.36" - "@swc/core-win32-arm64-msvc" "1.3.36" - "@swc/core-win32-ia32-msvc" "1.3.36" - "@swc/core-win32-x64-msvc" "1.3.36" - -"@swc/core@^1.3.96": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.100.tgz#8fa36f26a35137620234b084224c9fa9b8a0fee2" - integrity sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw== +"@swc/core-darwin-arm64@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.0.tgz#11abf23b884929a467ba270cf6789b9c50c4248b" + integrity sha512-UTJ/Vz+s7Pagef6HmufWt6Rs0aUu+EJF4Pzuwvr7JQQ5b1DZeAAUeUtkUTFx/PvCbM8Xfw4XdKBUZfrIKCfW8A== + +"@swc/core-darwin-x64@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.0.tgz#f044ddaca60c5081e907b148721ad7461f6f6dfe" + integrity sha512-f8v58u2GsGak8EtZFN9guXqE0Ep10Suny6xriaW2d8FGqESPyNrnBzli3aqkSeQk5gGqu2zJ7WiiKp3XoUOidA== + +"@swc/core-linux-arm-gnueabihf@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.0.tgz#52ceea673fc76692c0bd6d58e1863125c3e6173b" + integrity sha512-q2KAkBzmPcTnRij/Y1fgHCKAGevUX/H4uUESrw1J5gmUg9Qip6onKV80lTumA1/aooGJ18LOsB31qdbwmZk9OA== + +"@swc/core-linux-arm64-gnu@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.0.tgz#7f3ff1ab824ec48acdb39d231cbcb4096a4f9dd0" + integrity sha512-SknGu96W0mzHtLHWm+62fk5+Omp9fMPFO7AWyGFmz2tr8EgRRXtTSrBUnWhAbgcalnhen48GsvtMdxf1KNputg== + +"@swc/core-linux-arm64-musl@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.0.tgz#26c3b1f7947c19ef725997af716f230957d586f8" + integrity sha512-/k3TDvpBRMDNskHooNN1KqwUhcwkfBlIYxRTnJvsfT2C7My4pffR+4KXmt0IKynlTTbCdlU/4jgX4801FSuliw== + +"@swc/core-linux-x64-gnu@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.0.tgz#2c7d03a04a7d045394cfed7d46419ff8816ec22e" + integrity sha512-GYsTMvNt5+WTVlwwQzOOWsPMw6P/F41u5PGHWmfev8Nd4QJ1h3rWPySKk4mV42IJwH9MgQCVSl3ygwNqwl6kFg== + +"@swc/core-linux-x64-musl@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.0.tgz#0e76442dfb6d5026d8d6e7db6b2f4922b7692d0f" + integrity sha512-jGVPdM/VwF7kK/uYRW5N6FwzKf/FnDjGIR3RPvQokjYJy7Auk+3Oj21C0Jev7sIT9RYnO/TrFEoEozKeD/z2Qw== + +"@swc/core-win32-arm64-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.0.tgz#0177bebf312eb251d6749ab76259c0e08088e837" + integrity sha512-biHYm1AronEKlt47O/H8sSOBM2BKXMmWT+ApvlxUw50m1RGNnVnE0bgY7tylFuuSiWyXsQPJbmUV708JqORXVg== + +"@swc/core-win32-ia32-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.0.tgz#27fa650280e5651aa42129eaf03e02787b866417" + integrity sha512-TL5L2tFQb19kJwv6+elToGBj74QXCn9j+hZfwQatvZEJRA5rDK16eH6oAE751dGUArhnWlW3Vj65hViPvTuycw== + +"@swc/core-win32-x64-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.0.tgz#bd575c599bd6847bddc4863a3babd85e3db5e11e" + integrity sha512-e2xVezU7XZ2Stzn4i7TOQe2Kn84oYdG0M3A7XI7oTdcpsKCcKwgiMoroiAhqCv+iN20KNqhnWwJiUiTj/qN5AA== + +"@swc/core@^1.3.1", "@swc/core@^1.3.107": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.0.tgz#3a0ceeea5b889173f4592955fe1da4d071d86a76" + integrity sha512-wc5DMI5BJftnK0Fyx9SNJKkA0+BZSJQx8430yutWmsILkHMBD3Yd9GhlMaxasab9RhgKqZp7Ht30hUYO5ZDvQg== dependencies: "@swc/counter" "^0.1.1" "@swc/types" "^0.1.5" optionalDependencies: - "@swc/core-darwin-arm64" "1.3.100" - "@swc/core-darwin-x64" "1.3.100" - "@swc/core-linux-arm64-gnu" "1.3.100" - "@swc/core-linux-arm64-musl" "1.3.100" - "@swc/core-linux-x64-gnu" "1.3.100" - "@swc/core-linux-x64-musl" "1.3.100" - "@swc/core-win32-arm64-msvc" "1.3.100" - "@swc/core-win32-ia32-msvc" "1.3.100" - "@swc/core-win32-x64-msvc" "1.3.100" + "@swc/core-darwin-arm64" "1.4.0" + "@swc/core-darwin-x64" "1.4.0" + "@swc/core-linux-arm-gnueabihf" "1.4.0" + "@swc/core-linux-arm64-gnu" "1.4.0" + "@swc/core-linux-arm64-musl" "1.4.0" + "@swc/core-linux-x64-gnu" "1.4.0" + "@swc/core-linux-x64-musl" "1.4.0" + "@swc/core-win32-arm64-msvc" "1.4.0" + "@swc/core-win32-ia32-msvc" "1.4.0" + "@swc/core-win32-x64-msvc" "1.4.0" "@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/types@^0.1.5": version "0.1.5" @@ -4191,24 +3308,10 @@ "@babel/runtime" "^7.14.6" "@testing-library/dom" "^9.0.0" -"@testing-library/dom@^7.22.3": - version "7.31.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" - integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" - chalk "^4.1.0" - dom-accessibility-api "^0.5.6" - lz-string "^1.4.4" - pretty-format "^26.6.2" - "@testing-library/dom@^9.0.0": - version "9.3.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" - integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -4219,42 +3322,33 @@ lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/jest-dom@~5.11.3": - version "5.11.10" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz#1cd90715023e1627f5ed26ab3b38e6f22d77046c" - integrity sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ== +"@testing-library/jest-dom@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz#38949f6b63722900e2d75ba3c6d9bf8cffb3300e" + integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw== dependencies: + "@adobe/css-tools" "^4.3.2" "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^4.2.2" + aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react-hooks@~3.4.1": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-3.4.2.tgz#8deb94f7684e0d896edd84a4c90e5b79a0810bc2" - integrity sha512-RfPG0ckOzUIVeIqlOc1YztKgFW+ON8Y5xaSPbiBkfj9nMkkiLhLeBXT5icfPX65oJV/zCZu4z8EVnUc6GY9C5A== - dependencies: - "@babel/runtime" "^7.5.4" - "@types/testing-library__react-hooks" "^3.4.0" - -"@testing-library/react@~10.4.9": - version "10.4.9" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.9.tgz#9faa29c6a1a217bf8bbb96a28bd29d7a847ca150" - integrity sha512-pHZKkqUy0tmiD81afs8xfiuseXfU/N7rAX3iKjeZYje86t9VaB0LrxYVa+OOsvkrveX5jCK3IjajVn2MbePvqA== - dependencies: - "@babel/runtime" "^7.10.3" - "@testing-library/dom" "^7.22.3" - -"@testing-library/user-event@^12.1.1": - version "12.8.3" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.8.3.tgz#1aa3ed4b9f79340a1e1836bc7f57c501e838704a" - integrity sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ== +"@testing-library/react@~14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.2.1.tgz#bf69aa3f71c36133349976a4a2da3687561d8310" + integrity sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A== dependencies: "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^14.5.2": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== "@tootallnate/once@2": version "2.0.0" @@ -4281,31 +3375,15 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - "@types/aria-query@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== - -"@types/babel__core@^7.0.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" - integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== -"@types/babel__core@^7.18.0": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.3.tgz#d5625a50b6f18244425a1359a858c73d70340778" - integrity sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA== +"@types/babel__core@^7.0.0", "@types/babel__core@^7.18.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -4314,46 +3392,39 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" - integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== - dependencies: - "@babel/types" "^7.3.0" - -"@types/babel__traverse@^7.18.0": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.3.tgz#a971aa47441b28ef17884ff945d0551265a2d058" - integrity sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.18.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" "@types/braintree-web@^3.75.23": - version "3.75.23" - resolved "https://registry.yarnpkg.com/@types/braintree-web/-/braintree-web-3.75.23.tgz#4ef88d6724582c9f6f01f57f90b98ec575087976" - integrity sha512-uD2wQCpHXlaPHjVkoaHgNcKY8zpPddSYRztWQ3cRbpiP99Fk4p6HqDV/OkB58oMyLf5syz9cYG96qsS4VXtPKw== + version "3.96.10" + resolved "https://registry.yarnpkg.com/@types/braintree-web/-/braintree-web-3.96.10.tgz#c718cd9b6b107748746c04b3d02b0d07af7f951b" + integrity sha512-WB68hhxId8cUxddF9Au8STWULeeT2ZGvSJ+SvJz5ACqV3mYg7rlFkCOY88wHvbWBQAerqdxQ8NLVTe5V05R4/Q== dependencies: "@types/googlepay" "*" "@types/paypal-checkout-components" "*" @@ -4371,16 +3442,16 @@ integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== "@types/chart.js@^2.9.21": - version "2.9.37" - resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.37.tgz#8af70862b154fedf938b5b87debdb3a70f6e3208" - integrity sha512-9bosRfHhkXxKYfrw94EmyDQcdjMaQPkU1fH2tDxu8DWXxf1mjzWQAV4laJF51ZbC2ycYwNDvIm1rGez8Bug0vg== + version "2.9.41" + resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.41.tgz#4148cdc87d4f98fad44b2883271cd0fa57f05e0d" + integrity sha512-3dvkDvueckY83UyUXtJMalYoH6faOLkWQoaTlJgB4Djde3oORmNP0Jw85HtzTuXyliUHcdp704s0mZFQKio/KQ== dependencies: moment "^2.10.2" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" @@ -4390,16 +3461,16 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cross-spawn@^6.0.2": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.4.tgz#e658d29e2308a01f48b7b30fd8cdf07aeb2e5a82" - integrity sha512-GGLpeThc2Bu8FBGmVn76ZU3lix17qZensEI4/MPty0aZpm2CHfgEMis31pf5X5EiudYKcPAsWciAsCALoPo5dw== + version "6.0.6" + resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.6.tgz#0163d0b79a6f85409e0decb8dcca17147f81fd22" + integrity sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA== dependencies: "@types/node" "*" "@types/css-mediaquery@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@types/css-mediaquery/-/css-mediaquery-0.1.1.tgz#0902ee5849b89a45390c2c9dccbb536a75a88511" - integrity sha512-JQ+sPiPlRUHmlL4e3DBUNbxVEb6p7dis78/uSDbQpkeCKVoepChZMWGPIVA2JIH0ylfkA9S+TZUdShlgDpFKrw== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/css-mediaquery/-/css-mediaquery-0.1.4.tgz#8efbebbc0cebaf34c77db2b63892711e19143c63" + integrity sha512-DZyHAz716ZUctpqkUU2COwUoZ4gI6mZK2Q1oIz/fvNS6XHVpKSJgDnE7vRxZUBn9vjJHDVelCVW0dkshKOLFsA== "@types/d3-array@^3.0.3": version "3.2.1" @@ -4424,9 +3495,9 @@ "@types/d3-color" "*" "@types/d3-path@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.0.2.tgz#4327f4a05d475cf9be46a93fc2e0f8d23380805a" - integrity sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.0.tgz#2b907adce762a78e98828f0b438eaca339ae410a" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== "@types/d3-scale@^4.0.2": version "4.0.8" @@ -4452,24 +3523,17 @@ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== -"@types/debug@^4.0.0": +"@types/debug@^4.0.0", "@types/debug@^4.1.7": version "4.1.12" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" -"@types/debug@^4.1.7": - version "4.1.10" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.10.tgz#f23148a6eb771a34c466a4fc28379d8101e84494" - integrity sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA== - dependencies: - "@types/ms" "*" - "@types/detect-port@^1.3.0": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae" - integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.5.tgz#deecde143245989dee0e82115f3caba5ee0ea747" + integrity sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA== "@types/doctrine@^0.0.3": version "0.0.3" @@ -4482,43 +3546,44 @@ integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== "@types/ejs@^3.1.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.2.tgz#75d277b030bc11b3be38c807e10071f45ebc78d9" - integrity sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g== + version "3.1.5" + resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.5.tgz#49d738257cc73bafe45c13cb8ff240683b4d5117" + integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== "@types/emscripten@^1.39.6": - version "1.39.9" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.9.tgz#cbe73a8d153fc714a2e3177fbda2d7332d45efa7" - integrity sha512-ILdWj4XYtNOqxJaW22NEQx2gJsLfV5ncxYhhGX1a1H1lXl2Ta0gUz7QOnOoF1xQbJwWDjImi8gXN9mKdIf6n9g== + version "1.39.10" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.10.tgz#da6e58a6171b46a41d3694f812d845d515c77e18" + integrity sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw== "@types/escodegen@^0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.6.tgz#5230a9ce796e042cda6f086dbf19f22ea330659c" integrity sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig== +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - "@types/express-serve-static-core@^4.17.33": - version "4.17.33" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" - integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" "@types/express@^4.7.0": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -4539,21 +3604,21 @@ "@types/node" "*" "@types/googlepay@*": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@types/googlepay/-/googlepay-0.6.4.tgz#e0b06ae1f12496c4fa43e52d35e76411dbbee135" - integrity sha512-PTt/UCllzl8z5HmhymPpSj6uENZvVKZvCBYdDVmbBVJnLStitxtWrterAOQZkKGlqVdzxNXYeif5hOAMNMS5mw== + version "0.7.5" + resolved "https://registry.yarnpkg.com/@types/googlepay/-/googlepay-0.7.5.tgz#b944cd0e4c49f4661c9b966cb45614eb7ae87a26" + integrity sha512-158egcRaqkMSpW6unyGV4uG4FpoCklRf3J5emCzOXSRVAohMfIuZ481JNvp4X6+KxoNjxWiGtMx5vb1YfQADPw== "@types/graceful-fs@^4.1.3": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/he@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/he/-/he-1.2.0.tgz#3845193e597d943bab4e61ca5d7f3d8fc3d572a3" - integrity sha512-uH2smqTN4uGReAiKedIVzoLUAXIYLBTbSofhx3hbNqj74Ua6KqFsLYszduTrLCMEAEAozF73DbGi/SC1bzQq4g== + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/he/-/he-1.2.3.tgz#c33ca3096f30cbd5d68d78211572de3f9adff75a" + integrity sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA== "@types/highlight.js@^9.7.0": version "9.12.4" @@ -4573,76 +3638,55 @@ integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== "@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/http-errors@*": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== -"@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" -"@types/jest-axe@^3.5.7": - version "3.5.7" - resolved "https://registry.yarnpkg.com/@types/jest-axe/-/jest-axe-3.5.7.tgz#12abeb00936a71e71760ee00c574f63e68d5d873" - integrity sha512-eFIaZbh4t7Odys8dSQBJLMbM3cubzaJLl+g5yZwBMF6nqOpXQCvwPQPDHk0tfVepeDodcLy87bopvHb5bWrNAQ== - dependencies: - "@types/jest" "*" - axe-core "^3.5.5" - -"@types/jest@*": - version "29.4.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206" - integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - "@types/js-levenshtein@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.2.tgz#e88f365d6a34beeaff9654706b99a790b5a5aabd" - integrity sha512-/NCbMABw2uacuyE16Iwka1EzREDD50/W2ggRBad0y1WHBvAkvR9OEINxModVY7D428gXBe0igeVX7bUc9GaslQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz#a6fd0bdc8255b274e5438e0bfb25f154492d1106" + integrity sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ== "@types/jsdom@^21.1.4": - version "21.1.4" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.4.tgz#82105c8fb5a1072265dde1a180336ca74a8fbabf" - integrity sha512-NzAMLEV0KQ4cBaDx3Ls8VfJUElyDUm1xrtYRmcMK0gF8L5xYbujFVaQlJ50yinQ/d47j2rEP1XUzkiYrw4YRFA== + version "21.1.6" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.6.tgz#bcbc7b245787ea863f3da1ef19aa1dcfb9271a1b" + integrity sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw== dependencies: "@types/node" "*" "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/jspdf@^1.3.3": version "1.3.3" @@ -4650,14 +3694,14 @@ integrity sha512-DqwyAKpVuv+7DniCp2Deq1xGvfdnKSNgl9Agun2w6dFvR5UKamiv4VfYUgcypd8S9ojUyARFIlZqBrYrBMQlew== "@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" + integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== "@types/lodash@^4.14.167", "@types/lodash@^4.14.175": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== "@types/luxon@3.4.2": version "3.4.2" @@ -4675,9 +3719,9 @@ highlight.js "^9.7.0" "@types/md5@^2.1.32": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.2.tgz#529bb3f8a7e9e9f621094eb76a443f585d882528" - integrity sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.5.tgz#481cef0a896e3a5dcbfc5a8a8b02c05958af48a5" + integrity sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw== "@types/mdast@^3.0.0": version "3.0.15" @@ -4687,24 +3731,29 @@ "@types/unist" "^2" "@types/mdurl@*": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" + integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== "@types/mdx@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.3.tgz#43fd32414f17fcbeced3578109a6edd877a2d96e" - integrity sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ== + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.11.tgz#21f4c166ed0e0a3a733869ba04cd8daea9834b8e" + integrity sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw== "@types/mime-types@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.1.tgz#d9ba43490fa3a3df958759adf69396c3532cf2c1" - integrity sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw== + version "2.1.4" + resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.4.tgz#93a1933e24fed4fb9e4adc5963a63efcbb3317a2" + integrity sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w== "@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@*": version "5.1.2" @@ -4712,27 +3761,29 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/mocha@^10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.2.tgz#96d63314255540a36bf24da094cce7a13668d73b" - integrity sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w== + version "10.0.6" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" + integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== "@types/ms@*": - version "0.7.33" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.33.tgz#80bf1da64b15f21fd8c1dc387c31929317d99ee9" - integrity sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ== + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node-fetch@^2.6.4": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + version "2.6.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" - form-data "^3.0.0" + form-data "^4.0.0" "@types/node@*": - version "18.14.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.1.tgz#90dad8476f1e42797c49d6f8b69aaf9f876fc69f" - integrity sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ== + version "20.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" + integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== + dependencies: + undici-types "~5.26.4" "@types/node@^12.7.1": version "12.20.55" @@ -4740,36 +3791,36 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^18.0.0", "@types/node@^18.17.5": - version "18.18.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.8.tgz#2b285361f2357c8c8578ec86b5d097c7f464cfd6" - integrity sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ== + version "18.19.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.15.tgz#313a9d75435669a57fc28dc8694e7f4c4319f419" + integrity sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA== dependencies: undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/paypal-checkout-components@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/paypal-checkout-components/-/paypal-checkout-components-4.0.5.tgz#71d56b6cbdf85bd1f2c05d0fae0fa40ba2c35d7f" - integrity sha512-GQSehUkFYpSVKvJ3r0b2enJCMjuUb8mg7eG0Kz+27/2P5kHKMEF+uMkrBBEwlOApLcqaWTiiVVDntKdsHoUTRA== + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/paypal-checkout-components/-/paypal-checkout-components-4.0.8.tgz#dae11a164fb77fe370b013c0be44951bdc4ebf4d" + integrity sha512-Z3IWbFPGdgL3O+Bg+TyVmMT8S3uGBsBjw3a8uRNR4OlYWa9m895djENErJMYU8itoki9rtcQMzoHOSFn8NFb1A== "@types/pretty-hrtime@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz#72a26101dc567b0d68fd956cf42314556e42d601" - integrity sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#ee1bd8c9f7a01b3445786aad0ef23aba5f511a44" + integrity sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA== -"@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/prop-types@*", "@types/prop-types@^15.7.11": + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== "@types/qrcode.react@^0.8.0": version "0.8.2" @@ -4779,14 +3830,14 @@ "@types/react" "*" "@types/qs@*", "@types/qs@^6.9.5": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== "@types/raf@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2" - integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== + version "3.4.3" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" + integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== "@types/ramda@0.25.16": version "0.25.16" @@ -4794,49 +3845,35 @@ integrity sha512-jNxaEg+kSJ58iaM9bBawJugDxexXVPnLU245yEI1p2BTcfR5pcgM6mpsyBhRRo2ozyfJUvTmasL2Ft+C6BNkVQ== "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-beautiful-dnd@^13.0.0": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.3.tgz#9812f6086c4b77ce08c83120788d92084a26db0f" - integrity sha512-BNdmvONKtsrZq3AGrujECQrIn8cDT+fZsxBLXuX3YWY/nHfZinUFx4W88eS0rkcXzuLbXpKOsu/1WCMPMLEpPg== + version "13.1.8" + resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.8.tgz#f52d3ea07e1e19159d6c3c4a48c8da3d855e60b4" + integrity sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ== dependencies: "@types/react" "*" "@types/react-csv@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@types/react-csv/-/react-csv-1.1.3.tgz#b93a33314d71e8e3c5c41b20d19a2912c6e642c8" - integrity sha512-dkEdyRvRpygSnNg4cyzYWSUjukIQ5lAtXJwc7BqyUfzww/Cv2dcAFGYd+sWTFpGiDNZMVPp6vVPLcAPvJID8Kg== - dependencies: - "@types/react" "*" - -"@types/react-dom@*": - version "18.0.11" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" - integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== + version "1.1.10" + resolved "https://registry.yarnpkg.com/@types/react-csv/-/react-csv-1.1.10.tgz#b4e292d7330d2fa12062c579c752f254f559bf56" + integrity sha512-PESAyASL7Nfi/IyBR3ufd8qZkyoS+7jOylKmJxRZUZLFASLo4NZaRsJ8rNP8pCcbIziADyWBbLPD1nPddhsL4g== dependencies: "@types/react" "*" -"@types/react-dom@^17.0.9": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.19.tgz#36feef3aa35d045cacd5ed60fe0eef5272f19492" - integrity sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ== - dependencies: - "@types/react" "^17" - -"@types/react-is@^18.2.1": - version "18.2.1" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-18.2.1.tgz#61d01c2a6fc089a53520c0b66996d458fdc46863" - integrity sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw== +"@types/react-dom@*", "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.18": + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" + integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== dependencies: "@types/react" "*" "@types/react-redux@^7.1.20", "@types/react-redux@~7.1.7": - version "7.1.25" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.25.tgz#de841631205b24f9dfb4967dd4a7901e048f9a88" - integrity sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg== + version "7.1.33" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" + integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -4877,89 +3914,79 @@ "@types/react-dom" "*" "@types/react-transition-group" "*" -"@types/react-test-renderer@*": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.0.tgz#7b7f69ca98821ea5501b21ba24ea7b6139da2243" - integrity sha512-C7/5FBJ3g3sqUahguGi03O79b8afNeSD6T8/GU50oQrJCU0bVCCGQHaGKUbg2Ce8VQEEqTw8/HiS6lXHHdgkdQ== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@*": - version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" - integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@^4.4.6": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" - integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== +"@types/react-transition-group@*", "@types/react-transition-group@^4.4.10": + version "4.4.10" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" + integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@>=16", "@types/react@^17", "@types/react@^17.0.27": - version "17.0.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab" - integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw== +"@types/react@*", "@types/react@>=16", "@types/react@^18.2.55": + version "18.2.55" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.55.tgz#38141821b7084404b5013742bc4ae08e44da7a67" + integrity sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/recompose@^0.30.0": - version "0.30.10" - resolved "https://registry.yarnpkg.com/@types/recompose/-/recompose-0.30.10.tgz#b6ab1743c279f463f2b62ccb90b82433dcea63c5" - integrity sha512-oF1ulwi5Tz7L9jZE870CCyD6n/nvCLNaGMp/oMEnm4gd7doc67rSHtypM6MFDiI6BKjTXoR87CwhET5JJInDFQ== + version "0.30.14" + resolved "https://registry.yarnpkg.com/@types/recompose/-/recompose-0.30.14.tgz#06c5b3ff3f1df746ab6e8baecc3e288971936892" + integrity sha512-DDxwOemcQhtXuwIODKz8UVRroNoMkLoHiLJ/kIML3nC4WWE/0sfdrCev4zsazHCuj9BwDTTn/LsNtxwxTRK1WA== dependencies: "@types/react" "*" "@types/redux-mock-store@^1.0.1": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/redux-mock-store/-/redux-mock-store-1.0.3.tgz#895de4a364bc4836661570aec82f2eef5989d1fb" - integrity sha512-Wqe3tJa6x9MxMN4DJnMfZoBRBRak1XTPklqj4qkVm5VBpZnC8PSADf4kLuFQ9NAdHaowfWoEeUMz7NWc2GMtnA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/redux-mock-store/-/redux-mock-store-1.0.6.tgz#0a03b2655028b7cf62670d41ac1de5ca1b1f5958" + integrity sha512-eg5RDfhJTXuoJjOMyXiJbaDb1B8tfTaJixscmu+jOusj6adGC0Krntz09Tf4gJgXeCqCrM5bBMd+B7ez0izcAQ== dependencies: redux "^4.0.5" "@types/resolve@^1.20.2": - version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.4.tgz#d2df996a35695c843dbf180e26bc2c7a0f1a3e12" - integrity sha512-BKGK0T1VgB1zD+PwQR4RRf0ais3NyvH1qjLUrHI5SEiccYaJrhLstLuoXFWJ+2Op9whGizSPUMGPJY/Qtb/A2w== + version "1.20.6" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" + integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== "@types/sanitize-html@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.9.1.tgz#6e4b232916cfb3ec0c4733c9899c99e1697ef953" - integrity sha512-XSLD0a9P8c+rKUM09KIi5Nd8mOHLHNgXb1G04rpXWa/GqQVpM+knrS9KR9ptj1CeC3gXWGZn75ApH3H6qNbhYA== + version "2.11.0" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.11.0.tgz#582d8c72215c0228e3af2be136e40e0b531addf2" + integrity sha512-7oxPGNQHXLHE48r/r/qjn7q0hlrs3kL7oZnGj0Wf/h9tj/6ibFyRkNbsDxaBBZ4XUZ0Dx5LGCyDJ04ytSofacQ== dependencies: htmlparser2 "^8.0.0" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== +"@types/semver@^7.3.12", "@types/semver@^7.3.4": + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== -"@types/semver@^7.3.4": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" "@types/serve-static@*": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" "@types/set-cookie-parser@^2.4.0": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.5.tgz#f08fc44f9ab0bb136b7a73bc4e73de7c0c747cf3" - integrity sha512-ZPmztaAQ4rbnW/WTUnT1dwSENQo4bjGqxCSeyK+gZxmd+zJl/QAeF6dpEXcS5UEJX22HwiggFSaY8nE1nRmkbg== + version "2.4.7" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.7.tgz#4a341ed1d3a922573ee54db70b6f0a6d818290e7" + integrity sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg== dependencies: "@types/node" "*" @@ -4969,28 +3996,9 @@ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/testing-library__jest-dom@^5.9.1": - version "5.14.5" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f" - integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ== - dependencies: - "@types/jest" "*" - -"@types/testing-library__react-hooks@^3.4.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.4.1.tgz#b8d7311c6c1f7db3103e94095fe901f8fef6e433" - integrity sha512-G4JdzEcq61fUyV6wVW9ebHWEiLK2iQvaBuCHHn9eMSbZzVh4Z4wHnUGIvQOYCCYeu5DnUtFyNYuAAgbSaO/43Q== - dependencies: - "@types/react-test-renderer" "*" + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== "@types/throttle-debounce@^1.0.0": version "1.1.1" @@ -4998,65 +4006,53 @@ integrity sha512-VhX9p0l8p3TS27XU+CnDfhdnzW7HpVgtKiYDh/lfucSAz8s9uTt0q4aPwcYIr+q+3/NghlU3smXBW6ItvfJKYQ== "@types/tough-cookie@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.4.tgz#cf2f0c7c51b985b6afecea73eb2cd65421ecb717" - integrity sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A== + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== -"@types/unist@^2": +"@types/unist@^2", "@types/unist@^2.0.0": version "2.0.10" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== -"@types/unist@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== - "@types/uuid@^3.4.3": - version "3.4.10" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.10.tgz#637d3c8431f112edf6728ac9bdfadfe029540f48" - integrity sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A== + version "3.4.13" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.13.tgz#fe890e517fb840620be284ee213e81d702b1f76b" + integrity sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A== "@types/uuid@^9.0.1": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8" - integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== "@types/warning@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" - integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" + integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q== -"@types/xml2js@0.4.13": - version "0.4.13" - resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.13.tgz#219134d550c21e2f1d7b0e2fbb9174144c6053ed" - integrity sha512-nuT42GzgoUa4zZgBoF4d+Zqc12/FlVxXCT4xU6j3RfqTFVQWrUAClI/0sNJ5ImM9Wv6KB42KMG2xsVMn4cSBzA== +"@types/xml2js@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.14.tgz#5d462a2a7330345e2309c6b549a183a376de8f9a" + integrity sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ== dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.22" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" - integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" @@ -5066,9 +4062,9 @@ integrity sha512-Ynb/CjHhE/Xp/4bhHmQC4U1Ox+I2OpfRYF3dnNgQqn1cHa6LK3H1wJMNPT02tSVZA6FYuXE2ITORfbnb6zBCSA== "@types/zxcvbn@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.1.tgz#46e42cbdcee681b22181478feaf4af2bc4c1abd2" - integrity sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w== + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.4.tgz#987f5fcd87e957097433c476c3a1c91a54f53131" + integrity sha512-Tuk4q7q0DnpzyJDI4aMeghGuFu2iS1QAdKpabn8JfbtfGmVDUgvZv1I7mEjP61Bvnp3ljKCC8BE6YYSTNxmvRQ== "@typescript-eslint/eslint-plugin@^4.1.1": version "4.33.0" @@ -5125,13 +4121,13 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" - integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/visitor-keys" "5.60.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" "@typescript-eslint/types@3.10.1": version "3.10.1" @@ -5143,10 +4139,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.60.1", "@typescript-eslint/types@^5.59.11": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" - integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== +"@typescript-eslint/types@5.62.0", "@typescript-eslint/types@^5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" @@ -5175,30 +4171,30 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" - integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/visitor-keys" "5.60.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.45.0", "@typescript-eslint/utils@^5.59.11": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" - integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== +"@typescript-eslint/utils@^5.45.0", "@typescript-eslint/utils@^5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.60.1" - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" @@ -5217,20 +4213,25 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" - integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@vitejs/plugin-react-swc@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz#1fadff5148003e8091168c431e44c850f9a39e74" - integrity sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig== + version "3.6.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz#dc9cd1363baf3780f3ad3e0a12a46a3ffe0c7526" + integrity sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g== dependencies: - "@swc/core" "^1.3.96" + "@swc/core" "^1.3.107" "@vitejs/plugin-react@^3.0.1": version "3.1.0" @@ -5244,9 +4245,9 @@ react-refresh "^0.14.0" "@vitest/coverage-v8@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.0.4.tgz#49193139399c37ddf16c23d96892ef32cd67a69a" - integrity sha512-xD6Yuql6RW0Ir/JJIs6rVrmnG2/KOWJF+IRX1oJQk5wGKGxbtdrYPbl+WTUn/4ICCQ2G20zbE1e8/nPNyAG5Vg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.2.2.tgz#681f4f76de896d0d2484cca32285477e288fec3a" + integrity sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw== dependencies: "@ampproject/remapping" "^2.2.1" "@bcoe/v8-coverage" "^0.2.3" @@ -5256,115 +4257,63 @@ istanbul-lib-source-maps "^4.0.1" istanbul-reports "^3.1.6" magic-string "^0.30.5" - magicast "^0.3.2" + magicast "^0.3.3" picocolors "^1.0.0" std-env "^3.5.0" test-exclude "^6.0.0" v8-to-istanbul "^9.2.0" -"@vitest/expect@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.0.1.tgz#5e63902316a3c65948c6e36f284046962601fb88" - integrity sha512-3cdrb/eKD/0tygDX75YscuHEHMUJ70u3UoLSq2eqhWks57AyzvsDQbyn53IhZ0tBN7gA8Jj2VhXiOV2lef7thw== - dependencies: - "@vitest/spy" "1.0.1" - "@vitest/utils" "1.0.1" - chai "^4.3.10" - -"@vitest/expect@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.2.0.tgz#de93f5c32c2781c41415a8c3a6e48e1c023d6613" - integrity sha512-H+2bHzhyvgp32o7Pgj2h9RTHN0pgYaoi26Oo3mE+dCi1PAqV31kIIVfTbqMO3Bvshd5mIrJLc73EwSRrbol9Lw== +"@vitest/expect@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.2.2.tgz#39ea22e849bbf404b7e5272786551aa99e2663d0" + integrity sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg== dependencies: - "@vitest/spy" "1.2.0" - "@vitest/utils" "1.2.0" + "@vitest/spy" "1.2.2" + "@vitest/utils" "1.2.2" chai "^4.3.10" -"@vitest/runner@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.0.1.tgz#d94cab9e3008dba52f89e811540184334766ab61" - integrity sha512-/+z0vhJ0MfRPT3AyTvAK6m57rzlew/ct8B2a4LMv7NhpPaiI2QLGyOBMB3lcioWdJHjRuLi9aYppfOv0B5aRQA== - dependencies: - "@vitest/utils" "1.0.1" - p-limit "^5.0.0" - pathe "^1.1.1" - -"@vitest/runner@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.2.0.tgz#84775f0f5c48620ff1943a45c19863355791c6d9" - integrity sha512-vaJkDoQaNUTroT70OhM0NPznP7H3WyRwt4LvGwCVYs/llLaqhoSLnlIhUClZpbF5RgAee29KRcNz0FEhYcgxqA== +"@vitest/runner@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.2.2.tgz#8b060a56ecf8b3d607b044d79f5f50d3cd9fee2f" + integrity sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg== dependencies: - "@vitest/utils" "1.2.0" + "@vitest/utils" "1.2.2" p-limit "^5.0.0" pathe "^1.1.1" -"@vitest/snapshot@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.0.1.tgz#9d2a01c64726afa62264175554690e5ce148d4a5" - integrity sha512-wIPtPDGSxEZ+DpNMc94AsybX6LV6uN6sosf5TojyP1m2QbKwiRuLV/5RSsjt1oWViHsTj8mlcwrQQ1zHGO0fMw== - dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" - -"@vitest/snapshot@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.2.0.tgz#2fcddb5c6e8a9d2fc9f18ea2f8fd39b1b6e691b4" - integrity sha512-P33EE7TrVgB3HDLllrjK/GG6WSnmUtWohbwcQqmm7TAk9AVHpdgf7M3F3qRHKm6vhr7x3eGIln7VH052Smo6Kw== +"@vitest/snapshot@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.2.2.tgz#f56fd575569774968f3eeba9382a166c26201042" + integrity sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA== dependencies: magic-string "^0.30.5" pathe "^1.1.1" pretty-format "^29.7.0" -"@vitest/spy@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.0.1.tgz#d82af1c4d935e08443bf20432ba55afd001ac71f" - integrity sha512-yXwm1uKhBVr/5MhVeSmtNqK+0q2RXIchJt8kokEKdrWLtkPeDgdbZ6SjR1VQGZuNdWL6sSBnLayIyVvcS0qLfA== - dependencies: - tinyspy "^2.2.0" - -"@vitest/spy@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.2.0.tgz#61104de4c19a3addefff021d884c9e20dc17ebcd" - integrity sha512-MNxSAfxUaCeowqyyGwC293yZgk7cECZU9wGb8N1pYQ0yOn/SIr8t0l9XnGRdQZvNV/ZHBYu6GO/W3tj5K3VN1Q== +"@vitest/spy@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.2.2.tgz#8fc2aeccb96cecbbdd192c643729bd5f97a01c86" + integrity sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g== dependencies: tinyspy "^2.2.0" "@vitest/ui@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@vitest/ui/-/ui-1.0.4.tgz#810aa36bdd0d984483ae0c50d5163012d8191c7a" - integrity sha512-gd4p6e7pjukSe4joWS5wpnm/JcEfzCZUYkYWQOORqJK1mDJ0MOaXa/9BbPOEVO5TcvdnKvFJUdJpFHnqoyYwZA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/ui/-/ui-1.2.2.tgz#62dddb1ec12bdc5c186e7f2425490bb8b5080695" + integrity sha512-CG+5fa8lyoBr+9i+UZGS31Qw81v33QlD10uecHxN2CLJVN+jLnqx4pGzGvFFeJ7jSnUCT0AlbmVWY6fU6NJZmw== dependencies: - "@vitest/utils" "1.0.4" + "@vitest/utils" "1.2.2" fast-glob "^3.3.2" fflate "^0.8.1" flatted "^3.2.9" pathe "^1.1.1" picocolors "^1.0.0" - sirv "^2.0.3" - -"@vitest/utils@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.0.1.tgz#ab2bf6de50845649b252a9d263765ab7f16bd6a2" - integrity sha512-MGPCHkzXbbAyscrhwGzh8uP1HPrTYLWaj1WTDtWSGrpe2yJWLRN9mF9ooKawr6NMOg9vTBtg2JqWLfuLC7Dknw== - dependencies: - diff-sequences "^29.6.3" - loupe "^2.3.7" - pretty-format "^29.7.0" - -"@vitest/utils@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.0.4.tgz#6e673eaf87a2ff28a12688d17bdbb62cc22bf773" - integrity sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA== - dependencies: - diff-sequences "^29.6.3" - loupe "^2.3.7" - pretty-format "^29.7.0" + sirv "^2.0.4" -"@vitest/utils@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.2.0.tgz#deb9bdc3d094bf47f93a592a6a0b3946aa575e7a" - integrity sha512-FyD5bpugsXlwVpTcGLDf3wSPYy8g541fQt14qtzo8mJ4LdEpDKZ9mQy2+qdJm2TZRpjY5JLXihXCgIxiRJgi5g== +"@vitest/utils@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.2.2.tgz#94b5a1bd8745ac28cf220a99a8719efea1bcfc83" + integrity sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g== dependencies: diff-sequences "^29.6.3" estree-walker "^3.0.3" @@ -5437,17 +4386,7 @@ acorn-walk@^7.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.1.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" - integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== - -acorn-walk@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" - integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== - -acorn-walk@^8.3.1: +acorn-walk@^8.1.1, acorn-walk@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== @@ -5457,15 +4396,10 @@ acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.10.0, acorn@^8.4.1: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.10.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== address@^1.0.1: version "1.2.2" @@ -5513,24 +4447,24 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: uri-js "^4.2.2" algoliasearch@^4.14.3: - version "4.14.3" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.3.tgz#f02a77a4db17de2f676018938847494b692035e7" - integrity sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg== - dependencies: - "@algolia/cache-browser-local-storage" "4.14.3" - "@algolia/cache-common" "4.14.3" - "@algolia/cache-in-memory" "4.14.3" - "@algolia/client-account" "4.14.3" - "@algolia/client-analytics" "4.14.3" - "@algolia/client-common" "4.14.3" - "@algolia/client-personalization" "4.14.3" - "@algolia/client-search" "4.14.3" - "@algolia/logger-common" "4.14.3" - "@algolia/logger-console" "4.14.3" - "@algolia/requester-browser-xhr" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/requester-node-http" "4.14.3" - "@algolia/transporter" "4.14.3" + version "4.22.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" + integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== + dependencies: + "@algolia/cache-browser-local-storage" "4.22.1" + "@algolia/cache-common" "4.22.1" + "@algolia/cache-in-memory" "4.22.1" + "@algolia/client-account" "4.22.1" + "@algolia/client-analytics" "4.22.1" + "@algolia/client-common" "4.22.1" + "@algolia/client-personalization" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/logger-console" "4.22.1" + "@algolia/requester-browser-xhr" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/requester-node-http" "4.22.1" + "@algolia/transporter" "4.22.1" ansi-align@^3.0.1: version "3.0.1" @@ -5551,6 +4485,13 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -5566,7 +4507,7 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -5652,35 +4593,42 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" -aria-query@5.1.3, aria-query@^5.1.3: +aria-query@5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: deep-equal "^2.0.5" -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== +aria-query@^5.0.0, aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.5, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -5688,26 +4636,50 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== +array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + +array.prototype.tosorted@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + 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" asap@~2.0.3: version "2.0.6" @@ -5726,17 +4698,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== - dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" - -assert@^2.1.0: +assert@^2.0.0, assert@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== @@ -5752,10 +4714,10 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== ast-types@^0.16.1: version "0.16.1" @@ -5780,9 +4742,16 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^3.2.0, async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" asynckit@^0.4.0: version "0.4.0" @@ -5804,10 +4773,10 @@ attr-accept@^2.2.1: resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== aws-sign2@~0.7.0: version "0.7.0" @@ -5819,20 +4788,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== - -axe-core@^3.5.5: - version "3.5.6" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.6.tgz#e762a90d7f6dbd244ceacb4e72760ff8aad521b5" - integrity sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ== - -axe-core@^4.6.2: - version "4.6.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" - integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios-mock-adapter@^1.22.0: version "1.22.0" @@ -5843,20 +4802,20 @@ axios-mock-adapter@^1.22.0: is-buffer "^2.0.5" axios@~1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" - integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: follow-redirects "^1.15.4" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" @@ -5920,29 +4879,29 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" @@ -5984,9 +4943,9 @@ better-opn@^3.0.2: open "^8.0.4" big-integer@^1.6.16, big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== binary-extensions@^2.0.0: version "2.2.0" @@ -6074,21 +5033,21 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" braintree-web@^3.92.2: - version "3.92.2" - resolved "https://registry.yarnpkg.com/braintree-web/-/braintree-web-3.92.2.tgz#a11454f47b81fc7984dc2a1d5e3402cf1f7f6515" - integrity sha512-aGPwbXddmgUTshsCQvPi4OJcUi2KnOj4O8+lfCCohyO9qX+ZKNBNYfcdzhfQ8N+9DbLebUyrTjRJyJC1a+6oxA== + version "3.100.0" + resolved "https://registry.yarnpkg.com/braintree-web/-/braintree-web-3.100.0.tgz#e12b3f5aa5b6f8ca3d4c234a9481b611a81306ef" + integrity sha512-+paeD3D5uYUfKKa3dnuIj6sRyivXQMoKmlwH3Iiy4f1e+4BZyirMj8egO4J9srPf+mIInLSYP60RwoymalfMsQ== dependencies: "@braintree/asset-loader" "0.4.4" - "@braintree/browser-detection" "1.14.0" + "@braintree/browser-detection" "1.17.1" "@braintree/event-emitter" "0.4.1" "@braintree/extended-promise" "0.4.1" "@braintree/iframer" "1.1.0" - "@braintree/sanitize-url" "6.0.2" + "@braintree/sanitize-url" "6.0.4" "@braintree/uuid" "0.1.0" "@braintree/wrap-promise" "2.1.0" card-validator "8.1.1" credit-card-type "9.1.0" - framebus "5.2.0" + framebus "5.2.1" inject-stylesheet "5.0.0" promise-polyfill "8.2.3" restricted-input "3.0.5" @@ -6119,33 +5078,13 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -6180,9 +5119,9 @@ buffer@^5.5.0, buffer@^5.6.0: ieee754 "^1.1.13" bundle-require@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.1.tgz#2cc1ad76428043d15e0e7f30990ee3d5404aa2e3" - integrity sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.2.tgz#65fc74ff14eabbba36d26c9a6161bd78fff6b29e" + integrity sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag== dependencies: load-tsconfig "^0.2.3" @@ -6202,17 +5141,19 @@ cac@^6.7.12, cac@^6.7.14: integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" + integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + set-function-length "^1.2.0" caller-callsite@^2.0.0: version "2.0.0" @@ -6253,20 +5194,10 @@ camelcase@^7.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-lite@^1.0.30001449: - version "1.0.30001520" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz" - integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA== - -caniuse-lite@^1.0.30001541: - version "1.0.30001559" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz#95a982440d3d314c471db68d02664fb7536c5a30" - integrity sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA== - -caniuse-lite@^1.0.30001565: - version "1.0.30001570" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca" - integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== +caniuse-lite@^1.0.30001580: + version "1.0.30001585" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz#0b4e848d84919c783b2a41c13f7de8ce96744401" + integrity sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q== canvg@^3.0.6: version "3.0.10" @@ -6305,9 +5236,9 @@ chai-string@^1.5.0: integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== chai@^4.3.10: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== dependencies: assertion-error "^1.1.0" check-error "^1.0.3" @@ -6324,25 +5255,17 @@ chalk-template@0.4.0: dependencies: chalk "^4.1.2" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== -chalk@5.2.0, chalk@^5.0.1, chalk@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== +chalk@5.3.0, chalk@^5.0.1, chalk@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6359,6 +5282,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -6415,9 +5346,9 @@ check-more-types@^2.24.0: integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -6445,9 +5376,16 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0, ci-info@^3.7.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +citty@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50" + integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== + dependencies: + consola "^3.2.3" clean-stack@^2.0.0: version "2.2.0" @@ -6466,10 +5404,17 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + cli-spinners@^2.5.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@^0.6.1, cli-table3@~0.6.1: version "0.6.3" @@ -6547,10 +5492,10 @@ clsx@^1.1.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -clsx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== +clsx@^2.0.0, clsx@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" + integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== code-point-at@^1.0.0: version "1.1.0" @@ -6581,10 +5526,10 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.16, colorette@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colorette@^2.0.16, colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" @@ -6593,10 +5538,10 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" - integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== +commander@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== commander@^4.0.0: version "4.1.1" @@ -6668,6 +5613,11 @@ concurrently@^4.1.1: tree-kill "^1.2.1" yargs "^12.0.5" +consola@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + "consolidated-events@^1.1.0 || ^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" @@ -6690,7 +5640,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.5.0, convert-source-map@^1.7.0: +convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -6722,17 +5672,12 @@ copy-to-clipboard@^3.0.8: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.35.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.1.tgz#215247d7edb9e830efa4218ff719beb2803555e2" + integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw== dependencies: - browserslist "^4.22.1" - -core-js-pure@^3.25.1: - version "3.28.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.28.0.tgz#4ef2888475b6c856ef6f5aeef8b4f618b76ad048" - integrity sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ== + browserslist "^4.22.2" core-js@^1.0.0: version "1.2.7" @@ -6740,9 +5685,9 @@ core-js@^1.0.0: integrity sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA== core-js@^3.6.0, core-js@^3.8.3: - version "3.28.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.28.0.tgz#ed8b9e99c273879fdfff0edfc77ee709a5800e4a" - integrity sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw== + version "3.35.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.1.tgz#9c28f8b7ccee482796f8590cc8d15739eaaf980c" + integrity sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw== core-util-is@1.0.2: version "1.0.2" @@ -6787,13 +5732,13 @@ cosmiconfig@^7.0.0: yaml "^1.10.0" cosmiconfig@^8.1.3: - version "8.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" - integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - import-fresh "^3.2.1" + import-fresh "^3.3.0" js-yaml "^4.1.0" - parse-json "^5.0.0" + parse-json "^5.2.0" path-type "^4.0.0" country-region-data@^1.4.5: @@ -6872,15 +5817,6 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssstyle@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" @@ -6893,20 +5829,15 @@ csstype@^2.5.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== -csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -csstype@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@^3.0.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== cypress-axe@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.3.0.tgz#255ef8ef8e88747f2a72ceb7f7c60e8185b7852b" - integrity sha512-b2zAva1+uRwGA7r/JzP7C/64YHu9Fa8RsHRIrapUDzJeGLEQImz86FbwRW/lBamrEt7YHzGRwuJizXKTyQBsfQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.5.0.tgz#95082734583da77b51ce9b7784e14a442016c7a1" + integrity sha512-Hy/owCjfj+25KMsecvDgo4fC/781ccL+e8p+UUYoadGVM2ogZF9XIKbiM6KI8Y3cEaSreymdD6ZzccbI2bY0lQ== cypress-file-upload@^5.0.7: version "5.0.8" @@ -6926,7 +5857,7 @@ cypress-vite@^1.5.0: chokidar "^3.5.3" debug "^4.3.4" -cypress@^13.5.0: +cypress@13.5.0: version "13.5.0" resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.5.0.tgz#8c149074186130972f08b2cdce6ded41f014bacd" integrity sha512-oh6U7h9w8wwHfzNDJQ6wVcAeXu31DlIYlNOBvfd6U4CcB8oe4akawQmH+QJVOMZlM42eBoCne015+svVqdwdRQ== @@ -7073,9 +6004,9 @@ date-fns@^1.30.1: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== dayjs@^1.10.4: - version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" - integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== debug@2.6.9, debug@^2.6.9: version "2.6.9" @@ -7084,7 +6015,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -7120,11 +6051,6 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" @@ -7133,15 +6059,16 @@ deep-eql@^4.1.3: type-detect "^4.0.0" deep-equal@^2.0.5: - version "2.2.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" - integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== dependencies: - call-bind "^1.0.2" - es-get-iterator "^1.1.2" - get-intrinsic "^1.1.3" + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" is-arguments "^1.1.1" - is-array-buffer "^3.0.1" + is-array-buffer "^3.0.2" is-date-object "^1.0.5" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" @@ -7149,11 +6076,11 @@ deep-equal@^2.0.5: object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" side-channel "^1.0.4" which-boxed-primitive "^1.0.2" which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" deep-extend@^0.6.0: version "0.6.0" @@ -7171,9 +6098,9 @@ deepmerge@^2.1.1: integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== deepmerge@^4.2.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" - integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-browser-id@3.0.0: version "3.0.0" @@ -7190,23 +6117,34 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" + integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" -defu@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.2.tgz#1217cba167410a1765ba93893c6dbac9ed9d9e5c" - integrity sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ== +defu@^6.1.3: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== del@^6.0.0: version "6.1.1" @@ -7232,7 +6170,7 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -dequal@^2.0.0, dequal@^2.0.2: +dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -7272,11 +6210,6 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -7313,17 +6246,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== dom-helpers@^5.0.1: version "5.2.1" @@ -7354,7 +6285,7 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== @@ -7362,18 +6293,26 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^2.2.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.4.tgz#c17803931dd524e1b68e0e940a84567f9498f4bd" - integrity sha512-1e2SpqHiRx4DPvmRuXU5J0di3iQACwJM+mFGE2HAkkK7Tbnfk9WcghcAmyWc9CRrjyRRUpmuhPUH6LphQQR3EQ== + version "2.4.7" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" + integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.1" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" dotenv-expand@^10.0.0: version "10.0.0" @@ -7381,9 +6320,9 @@ dotenv-expand@^10.0.0: integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== dotenv@^16.0.0, dotenv@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + version "16.4.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" + integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== duplexify@^3.5.0, duplexify@^3.6.0: version "3.7.1" @@ -7414,26 +6353,16 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.284: - version "1.4.309" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.309.tgz#82158606da135ffffc16a2e1eb853fa0a10955e7" - integrity sha512-U7DTiKe4h+irqBG6h4EZ0XXaZuJj4md3xIXXaGSYhwiumPZ4BSc6rgf9UD0hVUMaeP/jB0q5pKWCPxvhO8fvZA== - -electron-to-chromium@^1.4.535: - version "1.4.572" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz#ed9876658998138fe9e3aa47ecfa0bf914192a86" - integrity sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA== - -electron-to-chromium@^1.4.601: - version "1.4.613" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz#529e4fc65576ecfd055d7d4619fade4fac446af2" - integrity sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w== +electron-to-chromium@^1.4.648: + version "1.4.665" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" + integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== emoji-regex@^7.0.1: version "7.0.3" @@ -7463,16 +6392,17 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" entities@^4.2.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@~2.1.0: version "2.1.0" @@ -7480,9 +6410,9 @@ entities@~2.1.0: integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.11.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" + integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== error-ex@^1.3.1: version "1.3.2" @@ -7491,46 +6421,57 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + 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" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" + +es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.2: +es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== @@ -7545,26 +6486,46 @@ es-get-iterator@^1.1.2: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" +es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.1" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.2" + safe-array-concat "^1.0.1" + es-module-lexer@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -7575,11 +6536,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== - esbuild-plugin-alias@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz#45a86cb941e20e7c2bc68a2bea53562172494fcb" @@ -7592,7 +6548,7 @@ esbuild-register@^3.5.0: dependencies: debug "^4.3.4" -esbuild@^0.18.0, esbuild@^0.18.2: +esbuild@^0.18.0: version "0.18.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== @@ -7620,38 +6576,39 @@ esbuild@^0.18.0, esbuild@^0.18.2: "@esbuild/win32-ia32" "0.18.20" "@esbuild/win32-x64" "0.18.20" -esbuild@^0.19.3: - version "0.19.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.8.tgz#ad05b72281d84483fa6b5345bd246c27a207b8f1" - integrity sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w== +esbuild@^0.19.2, esbuild@^0.19.3: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: - "@esbuild/android-arm" "0.19.8" - "@esbuild/android-arm64" "0.19.8" - "@esbuild/android-x64" "0.19.8" - "@esbuild/darwin-arm64" "0.19.8" - "@esbuild/darwin-x64" "0.19.8" - "@esbuild/freebsd-arm64" "0.19.8" - "@esbuild/freebsd-x64" "0.19.8" - "@esbuild/linux-arm" "0.19.8" - "@esbuild/linux-arm64" "0.19.8" - "@esbuild/linux-ia32" "0.19.8" - "@esbuild/linux-loong64" "0.19.8" - "@esbuild/linux-mips64el" "0.19.8" - "@esbuild/linux-ppc64" "0.19.8" - "@esbuild/linux-riscv64" "0.19.8" - "@esbuild/linux-s390x" "0.19.8" - "@esbuild/linux-x64" "0.19.8" - "@esbuild/netbsd-x64" "0.19.8" - "@esbuild/openbsd-x64" "0.19.8" - "@esbuild/sunos-x64" "0.19.8" - "@esbuild/win32-arm64" "0.19.8" - "@esbuild/win32-ia32" "0.19.8" - "@esbuild/win32-x64" "0.19.8" + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -7663,11 +6620,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -7695,11 +6647,11 @@ eslint-config-prettier@~8.1.0: integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== eslint-plugin-cypress@^2.11.3: - version "2.12.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz#9aeee700708ca8c058e00cdafe215199918c2632" - integrity sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA== + version "2.15.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz#336afa7e8e27451afaf65aa359c9509e0a4f3a7b" + integrity sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w== dependencies: - globals "^11.12.0" + globals "^13.20.0" eslint-plugin-es@^3.0.0: version "3.0.1" @@ -7710,26 +6662,26 @@ eslint-plugin-es@^3.0.0: regexpp "^3.0.0" eslint-plugin-jsx-a11y@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + dependencies: + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" eslint-plugin-node@^11.0.0: version "11.1.0" @@ -7744,15 +6696,15 @@ eslint-plugin-node@^11.0.0: semver "^6.1.0" eslint-plugin-perfectionist@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-1.4.0.tgz#c87b8b425a32098a1c291e1a412eb4a45a2f31e9" - integrity sha512-9gO+qmuU1DYzoYeN2D0PqYrI1FlqMPYGsZTWUWnWPrMQdFGFtq7eYraeQ57/8ffNBbVX6e6HvQOJ9iok9DfJvw== + version "1.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-1.5.1.tgz#9fa6bcb3b8634d583f5204f10ea7f0d9ae3fce3e" + integrity sha512-PiUrAfGDc/l6MKKUP8qt5RXueC7FZC6F/0j8ijXYU8o3x8o2qUi6zEEYBkId/IiKloIXM5KTD4jrH9833kDNzA== dependencies: - "@typescript-eslint/types" "^5.59.11" - "@typescript-eslint/utils" "^5.59.11" + "@typescript-eslint/types" "^5.62.0" + "@typescript-eslint/utils" "^5.62.0" is-core-module "^2.12.1" json5 "^2.2.3" - minimatch "^9.0.1" + minimatch "^9.0.3" natural-compare-lite "^1.4.0" eslint-plugin-prettier@~3.3.1: @@ -7777,14 +6729,15 @@ eslint-plugin-react-hooks@^3.0.0: integrity sha512-EjxTHxjLKIBWFgDJdhKKzLh5q+vjTFrqNZX36uIxWS4OfyXe5DawqPj3U5qeJ1ngLwatjzQnmR0Lz0J0YH3kxw== eslint-plugin-react@^7.19.0: - version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" - integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" @@ -7794,7 +6747,7 @@ eslint-plugin-react@^7.19.0: object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.4" - semver "^6.3.0" + semver "^6.3.1" string.prototype.matchall "^4.0.8" eslint-plugin-scanjs-rules@^0.2.1: @@ -7842,10 +6795,10 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -7881,54 +6834,53 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@>=1.1: - version "8.34.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" - integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" eslint@^6.8.0: @@ -7983,24 +6935,24 @@ espree@^6.1.2: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" - integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== +esquery@^1.0.1, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -8053,6 +7005,11 @@ eventemitter3@^4.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -8073,6 +7030,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -8101,21 +7073,6 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.0.0.tgz#2a44e20e73797f6c2df23889927972386157d7e4" - integrity sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - execa@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" @@ -8138,17 +7095,6 @@ executable@^4.1.1: dependencies: pify "^2.2.0" -expect@^29.0.0: - version "29.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.3.tgz#5e47757316df744fe3b8926c3ae8a3ebdafff7fe" - integrity sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg== - dependencies: - "@jest/expect-utils" "^29.4.3" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.4.3" - jest-message-util "^29.4.3" - jest-util "^29.4.3" - express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -8250,27 +7196,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-equals@^5.0.0: +fast-equals@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.2: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -8299,9 +7234,9 @@ fast-url-parser@1.1.3: punycode "^1.3.2" fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -8333,9 +7268,9 @@ fd-slicer@~1.1.0: pend "~1.2.0" fetch-retry@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.4.tgz#06e8e4533030bf6faa00ffbb9450cb9264c23c12" - integrity sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw== + version "5.0.6" + resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" + integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== fflate@^0.4.8: version "0.4.8" @@ -8343,9 +7278,9 @@ fflate@^0.4.8: integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== fflate@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.1.tgz#1ed92270674d2ad3c73f077cd0acf26486dae6c9" - integrity sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ== + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== figures@^3.0.0, figures@^3.2.0: version "3.2.0" @@ -8383,15 +7318,7 @@ file-system-cache@2.3.0: fs-extra "11.1.1" ramda "0.29.0" -file-system-cache@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.0.2.tgz#6b51d58c5786302146fa883529e0d7f88896e948" - integrity sha512-lp4BHO4CWqvRyx88Tt3quZic9ZMf4cJyquYq7UI8sH42Bm2ArlBBjKQAalZOo+UfaBassb7X123Lik5qZ/tSAA== - dependencies: - fs-extra "^11.1.0" - ramda "^0.28.0" - -filelist@^1.0.1: +filelist@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== @@ -8472,9 +7399,9 @@ find-yarn-workspace-root@^2.0.0: micromatch "^4.0.2" flag-icons@^6.6.5: - version "6.6.6" - resolved "https://registry.yarnpkg.com/flag-icons/-/flag-icons-6.6.6.tgz#9ddff81e1126778ca6a5a1e0e2cfac2e865f2cb7" - integrity sha512-4lHDKxldnQ7q617pf9Dx9nAetT+9zcMpUexbRrc9kjLw9KJgZ83zA5Dky3Vv7ZDzUjAiZ46x/cy5P0HnEnqA2A== + version "6.15.0" + resolved "https://registry.yarnpkg.com/flag-icons/-/flag-icons-6.15.0.tgz#9b9ea631f408ff41844872d1d7df9bd020d4c76d" + integrity sha512-ARo9Q+aATZEjyjveeec9e+orx+xLWUBdOX9baOKoGqDzMbvZ65ghPhaHbVt5T7ZB+Q4OFsB4Hr+eQnpV8Q+dLA== flat-cache@^2.0.1: version "2.0.1" @@ -8486,11 +7413,12 @@ flat-cache@^2.0.1: write "1.0.3" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" flatted@^2.0.0: @@ -8498,25 +7426,20 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== flow-parser@0.*: - version "0.200.1" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.200.1.tgz#99a94b35b7d1815716e3db56bb797440ed340716" - integrity sha512-N6gxgo0iQx0G2m3aJjg3RLxNLUG3EBYgBN/xDDPGQXSjvqNkTdEd2t1myE36Xi7GndZQWngDP7jf0GvxdL6pRg== + version "0.228.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.228.0.tgz#0b801507c8cf44257338596b49bd0904caea2026" + integrity sha512-xPWkzCO07AnS8X+fQFpWm+tJ+C7aeaiVzJ+rSepbkCXUvUJ6l6squEl63axoMcixyH4wLjmypOzq/+zTD0O93w== follow-redirects@^1.15.4: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== font-logos@^0.18.0: version "0.18.0" @@ -8543,15 +7466,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -8589,10 +7503,10 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -framebus@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/framebus/-/framebus-5.2.0.tgz#a1689e8bbd5abf3ae7af8b1139658bb66d808e62" - integrity sha512-hIKt71vBVd/g0emUbuVg8HAeHEjxBwhAE87CKXvxPIy0sCoGWqBulB1k9lWBWUU6ZHXPs0xjXWMwUldWMiqD6A== +framebus@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/framebus/-/framebus-5.2.1.tgz#6b7468191c020e28ee339c15561d4bd12864c636" + integrity sha512-K6pw+M2wNBuOhEoFrmMbf1O+fm7PnNDIfA9y0KpAyQzXRIJ420szGgJ/dI2Ikz0XG+5VfspLqA72M6bXhuyKIQ== dependencies: "@braintree/uuid" "^0.1.0" @@ -8616,9 +7530,9 @@ fs-extra@11.1.1: universalify "^2.0.0" fs-extra@>=5, fs-extra@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -8646,42 +7560,32 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.3.3: +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-bind@^1.1.2: +function-bind@^1.1.1, function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -8706,14 +7610,16 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-nonce@^1.0.0: version "1.0.1" @@ -8721,9 +7627,9 @@ get-nonce@^1.0.0: integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== get-npm-tarball-url@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz#67dff908d699e9e2182530ae6e939a93e5f8dfdb" - integrity sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz#cbd6bb25884622bc3191c761466c93ac83343213" + integrity sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA== get-package-type@^0.1.0: version "0.1.0" @@ -8765,12 +7671,13 @@ get-stream@^8.0.1: integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== 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" getos@^3.2.1: version "3.2.1" @@ -8786,19 +7693,20 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -giget@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/giget/-/giget-1.1.2.tgz#f99a49cb0ff85479c8c3612cdc7ca27f2066e818" - integrity sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A== - dependencies: - colorette "^2.0.19" - defu "^6.1.2" - https-proxy-agent "^5.0.1" - mri "^1.2.0" - node-fetch-native "^1.0.2" - pathe "^1.1.0" - tar "^6.1.13" - +giget@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.1.tgz#4f42779aae57a5f664a1c4d50401b008e9810f4c" + integrity sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + defu "^6.1.3" + node-fetch-native "^1.6.1" + nypm "^0.3.3" + ohash "^1.1.3" + pathe "^1.1.1" + tar "^6.2.0" + github-slugger@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -8823,30 +7731,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@>=7: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^10.0.0: +glob@>=7, glob@^10.0.0, glob@^10.3.1, glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -8857,17 +7742,6 @@ glob@^10.0.0: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" - integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.10.0" - glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -8887,7 +7761,7 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -globals@^11.1.0, globals@^11.12.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -8899,10 +7773,10 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== +globals@^13.19.0, globals@^13.20.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -8933,14 +7807,14 @@ gopd@^1.0.1: get-intrinsic "^1.1.3" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== graphql@^16.8.1: version "16.8.1" @@ -8960,12 +7834,12 @@ gunzip-maybe@^1.4.2: through2 "^2.0.3" handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -8991,12 +7865,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -9008,19 +7882,12 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - function-bind "^1.1.1" + has-symbols "^1.0.3" hasown@^2.0.0: version "2.0.0" @@ -9045,9 +7912,9 @@ hi-base32@^0.5.0: integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== highlight.js@*: - version "11.7.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.7.0.tgz#3ff0165bc843f8c9bce1fd89e2fda9143d24b11e" - integrity sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ== + version "11.9.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0" + integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw== highlight.js@^9.7.0: version "9.18.5" @@ -9103,9 +7970,9 @@ html-escaper@^2.0.0: integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-tags@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== html2canvas@^1.0.0-rc.5: version "1.4.1" @@ -9181,9 +8048,9 @@ human-signals@^2.1.0: integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== human-signals@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.0.tgz#2095c3cd5afae40049403d4b811235b03879db50" - integrity sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== human-signals@^5.0.0: version "5.0.0" @@ -9232,14 +8099,14 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@^9.0.6: - version "9.0.19" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" - integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== import-fresh@^2.0.0: version "2.0.0" @@ -9249,7 +8116,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -9335,13 +8202,13 @@ inquirer@^8.2.0: through "^2.3.6" wrap-ansi "^6.0.1" -internal-slot@^1.0.3, internal-slot@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" "internmap@1 - 2": @@ -9372,9 +8239,9 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-absolute-url@^3.0.0: version "3.0.3" @@ -9389,20 +8256,26 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -9447,27 +8320,13 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-core-module@^2.13.0: +is-core-module@^2.12.1, is-core-module@^2.13.0: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -9495,6 +8354,13 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -9517,7 +8383,7 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-generator-function@^1.0.7: +is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -9554,7 +8420,7 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-nan@^1.2.1, is-nan@^1.3.2: +is-nan@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== @@ -9670,16 +8536,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.14" is-typedarray@~1.0.0: version "1.0.0" @@ -9756,16 +8618,11 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0, istanbul-lib-coverage@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" @@ -9803,152 +8660,79 @@ istanbul-reports@^3.1.6: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +jackspeak@2.1.1, jackspeak@^2.3.5: + version "2.1.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.1.1.tgz#2a42db4cfbb7e55433c28b6f75d8b796af9669cd" + integrity sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw== dependencies: - "@isaacs/cliui" "^8.0.2" + cliui "^8.0.1" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jest-axe@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-8.0.0.tgz#4d89a1756bda2999a4271e851370981319389155" - integrity sha512-4kNcNn7J0jPO4jANEYZOHeQ/tSBvkXS+MxTbX1CKbXGd0+ZbRGDn/v/8IYWI/MmYX15iLVyYRnRev9X3ksePWA== - dependencies: - axe-core "4.7.2" - chalk "4.1.2" - jest-matcher-utils "29.2.2" - lodash.merge "4.6.2" + filelist "^1.0.4" + minimatch "^3.1.2" -jest-diff@^29.2.1: +jest-haste-map@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-diff@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.3.tgz#42f4eb34d0bf8c0fb08b0501069b87e8e84df347" - integrity sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.4.3" - -jest-get-type@^29.2.0, jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== - -jest-haste-map@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.3.tgz#085a44283269e7ace0645c63a57af0d2af6942e2" - integrity sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ== + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^29.4.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.4.3" - jest-util "^29.4.3" - jest-worker "^29.4.3" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-matcher-utils@29.2.2: - version "29.2.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c" - integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw== - dependencies: - chalk "^4.0.0" - jest-diff "^29.2.1" - jest-get-type "^29.2.0" - pretty-format "^29.2.1" - -jest-matcher-utils@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz#ea68ebc0568aebea4c4213b99f169ff786df96a0" - integrity sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg== - dependencies: - chalk "^4.0.0" - jest-diff "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.4.3" - -jest-message-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.3.tgz#65b5280c0fdc9419503b49d4f48d4999d481cb5b" - integrity sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.4.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.4.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-regex-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" - integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.3.tgz#851a148e23fc2b633c55f6dad2e45d7f4579f496" - integrity sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^29.4.3" + "@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" -jest-worker@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.3.tgz#9a4023e1ea1d306034237c7133d7da4240e8934e" - integrity sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" - jest-util "^29.4.3" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" @@ -9962,11 +8746,6 @@ js-levenshtein@^1.1.6: resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== -js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== - js-sha3@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -10062,6 +8841,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -10097,15 +8881,15 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.2, json5@^2.2.3: +json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== jsonfile@^6.0.1: version "6.1.0" @@ -10117,9 +8901,9 @@ jsonfile@^6.0.1: graceful-fs "^4.1.6" jspdf-autotable@^3.5.14: - version "3.5.28" - resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.5.28.tgz#5463acbfa7a5b182453afea8f8aeac48bc96bfdb" - integrity sha512-eNYt5mUxCGa1Y0bmOhGXU+Va/P2jNkgOgUPGIpZp2rbZUauU34s0q3S59Jps5zi2u90nQy7DmD/D+sdesJLIEA== + version "3.8.1" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.8.1.tgz#e4d9b62356a412024e8f08e84fdeb5b85e1383b5" + integrity sha512-UjJqo80Z3/WUzDi4JipTGp0pAvNvR3Gsm38inJ5ZnwsJH0Lw4pEbssRSH6zMWAhR1ZkTrsDpQo5p6rZk987/AQ== jspdf@^2.3.1: version "2.5.1" @@ -10146,23 +8930,32 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" junit2json@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/junit2json/-/junit2json-3.1.4.tgz#22c64c9d0f6624882952a5af59e0927b6cdd5266" - integrity sha512-56vEmCjFcLfsDVdBfhyBXJhs3TXL5gKGVr5cbkyoddRlBBq311iQIsupgelo2eBooAZ183VcgHAfvRZH2ZEg6Q== + version "3.1.5" + resolved "https://registry.yarnpkg.com/junit2json/-/junit2json-3.1.5.tgz#6832ae2c0bd0de9c59b532a92f32721af6cbee5b" + integrity sha512-6fAHN5OMb0VV3+f+8DJ3/8yysRJxajrnUmkBeR+QjQQtUXZ5h4E3RMzF7gFhLnIhFewBUAyQGalgCJrkHieHqQ== dependencies: - "@types/xml2js" "0.4.13" + "@types/xml2js" "0.4.14" xml2js "0.6.2" yargs "17.7.2" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -10185,17 +8978,17 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -language-subtag-registry@~0.3.2: +language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" launchdarkly-js-client-sdk@^3.1.4: version "3.1.4" @@ -10266,19 +9059,19 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.10.6: - version "1.10.20" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.20.tgz#03c310adf83381eeceb4bd6830442fd14e64964d" - integrity sha512-kQovlKNdLcVzerbTPmJ+Fx4R+7/pYXmPDIllHjg7IxL4X6MsMG7jaT5opfYrBok0uqkByVif//JUR8e11l/V7w== + version "1.10.55" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.55.tgz#ec864e369bf7babde02021d06b5f2433d7e9c78e" + integrity sha512-MrTg2JFLscgmTY6/oT9vopYETlgUls/FU6OaeeamGwk4LFxjIgOUML/ZSZICgR0LPYXaonVJo40lzMvaaTJlQA== lilconfig@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lilconfig@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== +lilconfig@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" + integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== lines-and-columns@^1.1.6: version "1.2.4" @@ -10293,23 +9086,32 @@ linkify-it@^3.0.1: uc.micro "^1.0.1" lint-staged@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" - integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== + version "13.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" + integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== + dependencies: + chalk "5.3.0" + commander "11.0.0" + debug "4.3.4" + execa "7.2.0" + lilconfig "2.1.0" + listr2 "6.6.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.1" + +listr2@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" + integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== dependencies: - chalk "5.2.0" cli-truncate "^3.1.0" - commander "^10.0.0" - debug "^4.3.4" - execa "^7.0.0" - lilconfig "2.1.0" - listr2 "^5.0.7" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.3" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.2.2" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" + rfdc "^1.3.0" + wrap-ansi "^8.1.0" listr2@^3.8.3: version "3.14.0" @@ -10325,20 +9127,6 @@ listr2@^3.8.3: through "^2.3.8" wrap-ansi "^7.0.0" -listr2@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.7.tgz#de69ccc4caf6bea7da03c74f7a2ffecf3904bd53" - integrity sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.8.0" - through "^2.3.8" - wrap-ansi "^7.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -10350,9 +9138,9 @@ load-json-file@^4.0.0: strip-bom "^3.0.0" load-tsconfig@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.3.tgz#08af3e7744943caab0c75f8af7f1703639c3ef1f" - integrity sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ== + version "0.2.5" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" + integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== local-pkg@^0.5.0: version "0.5.0" @@ -10409,7 +9197,7 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -lodash.merge@4.6.2, lodash.merge@^4.6.2: +lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -10447,6 +9235,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== + dependencies: + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" + logic-query-parser@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/logic-query-parser/-/logic-query-parser-0.0.5.tgz#56edf7c012f594c8236fd5175079ef5da1bea93c" @@ -10471,6 +9270,13 @@ loupe@^2.3.6, loupe@^2.3.7: dependencies: get-func-name "^2.0.1" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -10491,20 +9297,15 @@ lru-cache@^7.5.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== luxon@3.4.4: version "3.4.4" resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -10518,19 +9319,19 @@ magic-string@^0.27.0: "@jridgewell/sourcemap-codec" "^1.4.13" magic-string@^0.30.0, magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + version "0.30.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" + integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -magicast@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.2.tgz#42dcade5573ed8f10f5540f9d04964e21dba9130" - integrity sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg== +magicast@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" + integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== dependencies: - "@babel/parser" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" source-map-js "^1.0.2" make-dir@^2.0.0, make-dir@^2.1.0: @@ -10596,17 +9397,17 @@ markdown-table@^3.0.0: integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== markdown-to-jsx@^7.1.8: - version "7.1.9" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.1.9.tgz#1ffae0cda07c189163d273bd57a5b8f8f8745586" - integrity sha512-x4STVIKIJR0mGgZIZ5RyAeQD7FEZd5tS8m/htbcVGlex32J+hlSLj+ExrHCxP6nRKF1EKbcO7i6WhC1GtOpBlA== + version "7.4.1" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz#1ed6a60f8f9cd944bec39d9923fbbc8d3d60dcb9" + integrity sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A== match-sorter@^6.0.2: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== + version "6.3.4" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" + integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" + "@babel/runtime" "^7.23.8" + remove-accents "0.5.0" md5@^2.2.1, md5@^2.3.0: version "2.3.0" @@ -11073,7 +9874,7 @@ micromark@^3.0.0: micromark-util-types "^1.0.1" uvu "^0.5.0" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -11149,7 +9950,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: +minimatch@^9.0.1, minimatch@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -11168,15 +9969,10 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.4.tgz#7d0d97434b6a19f59c5c3221698b48bbf3b2cd06" - integrity sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ== - -"minipass@^5.0.0 || ^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" - integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.4" @@ -11214,14 +10010,14 @@ mkdirp@^3.0.0: integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== mlly@^1.2.0, mlly@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" - integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" + integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== dependencies: - acorn "^8.10.0" - pathe "^1.1.1" + acorn "^8.11.3" + pathe "^1.1.2" pkg-types "^1.0.3" - ufo "^1.3.0" + ufo "^1.3.2" mocha-junit-reporter@^2.2.1: version "2.2.1" @@ -11235,19 +10031,19 @@ mocha-junit-reporter@^2.2.1: xml "^1.0.1" moment@^2.10.2: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -mri@^1.1.0, mri@^1.2.0: +mri@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms@2.0.0: version "2.0.0" @@ -11335,7 +10131,7 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -11345,6 +10141,14 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -11352,15 +10156,15 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch-native@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.0.2.tgz#de3651399fda89a1a7c0bf6e7c4e9c239e8d0697" - integrity sha512-KIkvH1jl6b3O7es/0ShyCgWLcfXxlBrLBbP3rOr23WArC66IMcU4DeZEeYEOwnopYhawLTn7/y+YtmASe8DFVQ== +node-fetch-native@^1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" + integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== node-fetch@^1.0.1, node-fetch@^2.0.0, node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" @@ -11369,21 +10173,11 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -11437,9 +10231,9 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== dependencies: path-key "^4.0.0" @@ -11453,17 +10247,27 @@ nwsapi@^2.2.4: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== +nypm@^0.3.3: + version "0.3.6" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.3.6.tgz#940b558e6e56c2ed5dc43adf6dcf2c16577a80ff" + integrity sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ== + dependencies: + citty "^0.1.5" + execa "^8.0.1" + pathe "^1.1.2" + ufo "^1.3.2" + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.0.1, object-is@^1.1.5: +object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -11476,56 +10280,61 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.3, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== 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" -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== +object.entries@^1.1.6, object.entries@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== +object.fromentries@^2.0.6, object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" oblivious-set@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== +ohash@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07" + integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -11593,17 +10402,17 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" ora@^5.4.1: version "5.4.1" @@ -11640,9 +10449,9 @@ ospath@^1.2.2: integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== outvariant@^1.2.1, outvariant@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.0.tgz#e742e4bda77692da3eca698ef5bfac62d9fba06e" - integrity sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw== + version "1.4.2" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" + integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== p-defer@^1.0.0: version "1.0.0" @@ -11733,7 +10542,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -11761,9 +10570,9 @@ parseurl@~1.3.3: integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== patch-package@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-7.0.0.tgz#5c646b6b4b4bf37e5184a6950777b21dea6bb66e" - integrity sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ== + version "7.0.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-7.0.2.tgz#c01589bb6964854b5210506a5845d47900641f5a" + integrity sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q== dependencies: "@yarnpkg/lockfile" "^1.1.0" chalk "^4.1.2" @@ -11775,7 +10584,7 @@ patch-package@^7.0.0: minimist "^1.2.6" open "^7.4.2" rimraf "^2.6.3" - semver "^5.6.0" + semver "^7.5.3" slash "^2.0.0" tmp "^0.0.33" yaml "^2.2.2" @@ -11820,14 +10629,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" - integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2" - path-scurry@^1.10.1: version "1.10.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" @@ -11870,15 +10671,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03" - integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w== - -pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== pathval@^1.1.1: version "1.1.1" @@ -11914,16 +10710,16 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatc resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pidtree@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -11939,10 +10735,10 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^3.0.0: version "3.0.0" @@ -11982,24 +10778,24 @@ please-upgrade-node@^3.2.0: semver-compare "^1.0.0" polished@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" - integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" + integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== dependencies: "@babel/runtime" "^7.17.8" postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" + lilconfig "^3.0.0" + yaml "^2.3.4" -postcss@^8.3.11, postcss@^8.4.32: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== +postcss@^8.3.11, postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" @@ -12034,9 +10830,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^2.8.0: - version "2.8.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" - integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== prettier@~2.2.1: version "2.2.1" @@ -12048,16 +10844,6 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -12067,16 +10853,7 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" - integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.2.1, pretty-format@^29.7.0: +pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -12140,9 +10917,9 @@ prop-types@^15.0.0, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, react-is "^16.13.1" property-expr@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4" - integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== proxy-addr@~2.0.7: version "2.0.7" @@ -12198,9 +10975,9 @@ punycode@^1.3.2: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== puppeteer-core@^2.1.1: version "2.1.1" @@ -12238,13 +11015,20 @@ qs@6.10.4: dependencies: side-channel "^1.0.4" -qs@6.11.0, qs@^6.10.0: +qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" +qs@^6.10.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -12277,11 +11061,6 @@ ramda@0.29.0: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== -ramda@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" - integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== - range-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" @@ -12341,9 +11120,9 @@ react-docgen-typescript@^2.2.2: integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== react-docgen@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.0.1.tgz#b6528fe45385908645ffbee1ec0d65709e1e047c" - integrity sha512-rCz0HBIT0LWbIM+///LfRrJoTKftIzzwsYDf0ns5KwaEjejMHQRtphcns+IXFHDNY9pnz6G8l/JbbI6pD4EAIA== + version "7.0.3" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.0.3.tgz#f811b785f07b1f2023cb899b6bcf9d522b21b95d" + integrity sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ== dependencies: "@babel/core" "^7.18.9" "@babel/traverse" "^7.18.9" @@ -12356,14 +11135,13 @@ react-docgen@^7.0.0: resolve "^1.22.1" strip-indent "^4.0.0" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-dropzone@~11.2.0: version "11.2.4" @@ -12415,7 +11193,7 @@ react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -12533,13 +11311,14 @@ react-select@~3.1.0: react-input-autosize "^2.2.2" react-transition-group "^4.3.0" -react-smooth@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.5.tgz#d153b7dffc7143d0c99e82db1532f8cf93f20ecd" - integrity sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA== +react-smooth@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.0.tgz#69e560ab69b69a066187d70cb92c1a664f7f046a" + integrity sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg== dependencies: - fast-equals "^5.0.0" - react-transition-group "2.9.0" + fast-equals "^5.0.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" react-style-singleton@^2.2.1: version "2.2.1" @@ -12560,16 +11339,6 @@ react-test-renderer@16.14.0: react-is "^16.8.6" scheduler "^0.19.1" -react-transition-group@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - react-transition-group@^4.3.0, react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -12581,9 +11350,9 @@ react-transition-group@^4.3.0, react-transition-group@^4.4.5: prop-types "^15.6.2" react-vnc@^0.5.3: - version "0.5.8" - resolved "https://registry.yarnpkg.com/react-vnc/-/react-vnc-0.5.8.tgz#6957f5cc4cbdfde56ad01deca7fa7571869acd32" - integrity sha512-DJZ87qGmsNMRiT0WQbPx7aes/ko0xiYLeZ3l8MfK55gUfeQ6qByLnYW99XIV6O6KNGjDYGbp2jC1pAtMIZ+VBA== + version "0.5.16" + resolved "https://registry.yarnpkg.com/react-vnc/-/react-vnc-0.5.16.tgz#8198fad16358c45add6ec877d9c947590b8ca533" + integrity sha512-rM2VmY03cwbwl9v4y6DHjXGqLjHbZGBJxgG1P74QzrjagVG3WkH5+K1zgDgYK4x0Mjk/80WztWX56Q8lZ9F3Cg== react-waypoint@^10.3.0: version "10.3.0" @@ -12595,13 +11364,12 @@ react-waypoint@^10.3.0: prop-types "^15.0.0" react-is "^17.0.1 || ^18.0.0" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-pkg-up@^7.0.1: version "7.0.1" @@ -12654,9 +11422,9 @@ readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@~2.3.6: util-deprecate "~1.0.1" readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -12669,18 +11437,7 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -recast@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.1.tgz#ee415a5561d2f99f02318ea8db81ad3a2267a6ff" - integrity sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g== - dependencies: - assert "^2.0.0" - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - -recast@^0.23.3: +recast@^0.23.1, recast@^0.23.3: version "0.23.4" resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" integrity sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw== @@ -12699,15 +11456,15 @@ recharts-scale@^0.4.4: decimal.js-light "^2.4.1" recharts@^2.9.3: - version "2.10.1" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.10.1.tgz#c28c7451ed83d31072013446104ec07b3062893c" - integrity sha512-9bi0jIzxOTfEda+oYqgimKuYfApmBr0zKnAX8r4Iw56k3Saz/IQyBD4zohZL0eyzfz0oGFRH7alpJBgH1eC57g== + version "2.12.0" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.12.0.tgz#e731e2733359d7942d5807c34c70f67673096d25" + integrity sha512-rVNcdNQ5b7+40Ue7mcEKZJyEv+3SUk2bDEVvOyXPDXXVE7TU3lrvnJUgAvO36hSzhRP2DnAamKXvHLFIFOU0Ww== dependencies: clsx "^2.0.0" eventemitter3 "^4.0.1" lodash "^4.17.19" react-is "^16.10.2" - react-smooth "^2.0.5" + react-smooth "^4.0.0" recharts-scale "^0.4.4" tiny-invariant "^1.3.1" victory-vendor "^36.6.8" @@ -12751,10 +11508,23 @@ redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: dependencies: "@babel/runtime" "^7.9.2" +reflect.getprototypeof@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" + integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + get-intrinsic "^1.2.3" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -12763,15 +11533,15 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.7: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -12780,29 +11550,29 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.1.tgz#66900860f88def39a5cb79ebd9490e84f17bcdfb" - integrity sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" @@ -12863,10 +11633,10 @@ remark-slug@^6.0.0: mdast-util-to-string "^1.0.0" unist-util-visit "^2.0.0" -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== req-all@^1.0.0: version "1.0.0" @@ -12923,9 +11693,9 @@ reselect@4.0.0: integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== reselect@^4.0.0: - version "4.1.7" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" - integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== resolve-from@>=4, resolve-from@^5.0.0: version "5.0.0" @@ -12954,16 +11724,7 @@ resolve-pkg@>=1: dependencies: resolve-from "^5.0.0" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.1: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -12973,11 +11734,11 @@ resolve@^1.22.1: supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -12989,6 +11750,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + restricted-input@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/restricted-input/-/restricted-input-3.0.5.tgz#c43d279df36be0a11085daa3b1ae1d28044c44d8" @@ -13002,9 +11771,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rgbcolor@^1.0.1: version "1.0.1" @@ -13032,30 +11801,33 @@ rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" -"rollup@^2.25.0 || ^3.3.0", rollup@^3.2.5: - version "3.18.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.18.0.tgz#2354ba63ba66d6a09c652c3ea0dbcd9dad72bbde" - integrity sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg== +"rollup@^2.25.0 || ^3.3.0": + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: fsevents "~2.3.2" -rollup@^4.2.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.6.1.tgz#351501c86b5b4f976dde8c5837516452b59921f8" - integrity sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ== +rollup@^4.0.2, rollup@^4.2.0: + version "4.9.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" + integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== + dependencies: + "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.6.1" - "@rollup/rollup-android-arm64" "4.6.1" - "@rollup/rollup-darwin-arm64" "4.6.1" - "@rollup/rollup-darwin-x64" "4.6.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.6.1" - "@rollup/rollup-linux-arm64-gnu" "4.6.1" - "@rollup/rollup-linux-arm64-musl" "4.6.1" - "@rollup/rollup-linux-x64-gnu" "4.6.1" - "@rollup/rollup-linux-x64-musl" "4.6.1" - "@rollup/rollup-win32-arm64-msvc" "4.6.1" - "@rollup/rollup-win32-ia32-msvc" "4.6.1" - "@rollup/rollup-win32-x64-msvc" "4.6.1" + "@rollup/rollup-android-arm-eabi" "4.9.6" + "@rollup/rollup-android-arm64" "4.9.6" + "@rollup/rollup-darwin-arm64" "4.9.6" + "@rollup/rollup-darwin-x64" "4.9.6" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" + "@rollup/rollup-linux-arm64-gnu" "4.9.6" + "@rollup/rollup-linux-arm64-musl" "4.9.6" + "@rollup/rollup-linux-riscv64-gnu" "4.9.6" + "@rollup/rollup-linux-x64-gnu" "4.9.6" + "@rollup/rollup-linux-x64-musl" "4.9.6" + "@rollup/rollup-win32-arm64-msvc" "4.9.6" + "@rollup/rollup-win32-ia32-msvc" "4.9.6" + "@rollup/rollup-win32-x64-msvc" "4.9.6" fsevents "~2.3.2" rrweb-cssom@^0.6.0: @@ -13087,14 +11859,7 @@ rxjs@^6.5.2, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.5.1, rxjs@^7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -rxjs@^7.5.5: +rxjs@^7.5.1, rxjs@^7.5.5: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -13108,6 +11873,16 @@ sade@^1.7.3: dependencies: mri "^1.1.0" +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -13119,12 +11894,12 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== 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" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: @@ -13172,13 +11947,12 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" search-string@^3.1.0: version "3.1.0" @@ -13241,9 +12015,9 @@ serve-static@1.15.0: send "0.18.0" serve@^14.0.1: - version "14.2.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.0.tgz#3d768e88fa13ad8644f2393599189707176e66b8" - integrity sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg== + version "14.2.1" + resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.1.tgz#3f078d292ed5e7b2c5a64f957af2765b0459798b" + integrity sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA== dependencies: "@zeit/schemas" "2.29.0" ajv "8.11.0" @@ -13267,6 +12041,27 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== +set-function-length@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -13309,18 +12104,19 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" siginfo@^2.0.0: version "2.0.0" @@ -13332,32 +12128,27 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== - -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== simple-git@^3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.19.0.tgz#fe8d0cd86a0e68372b75c0c44a0cb887201c3f7d" - integrity sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA== + version "3.22.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.22.0.tgz#616d41c661e30f9c65778956317d422b1729a242" + integrity sha512-6JujwSs0ac82jkGjMHiCnTifvf1crOiY/+tfs/Pqih6iow7VrpNKRRNdWm6RtaXpvvv/JGNYhlUtLhGFqHF+Yw== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" debug "^4.3.4" -sirv@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== +sirv@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" totalist "^3.0.0" sisteransi@^1.0.5: @@ -13410,19 +12201,19 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.16, source-map-support@^0.5.19: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -13459,17 +12250,17 @@ spawn-command@^0.0.2-1: integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.4.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" + integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -13480,9 +12271,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== sprintf-js@~1.0.2: version "1.0.3" @@ -13490,9 +12281,9 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -13504,22 +12295,15 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - stackback@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== stackblur-canvas@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz#aa87bbed1560fdcd3138fff344fc6a1c413ebac4" - integrity sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" + integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== statuses@2.0.1: version "2.0.1" @@ -13527,9 +12311,9 @@ statuses@2.0.1: integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== std-env@^3.5.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.6.0.tgz#94807562bddc68fa90f2e02c5fd5b6865bb4e98e" - integrity sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== stop-iteration-iterator@^1.0.0: version "1.0.0" @@ -13558,16 +12342,16 @@ storybook-dark-mode@^3.0.3: memoizerific "^1.11.3" storybook@^7.6.10: - version "7.6.10" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.10.tgz#2185d26cd7b43390e3e2c7581586e2f60cdbd9bd" - integrity sha512-ypFeGhQTUBBfqSUVZYh7wS5ghn3O2wILCiQc4459SeUpvUn+skcqw/TlrwGSoF5EWjDA7gtRrWDxO3mnlPt5Cw== + version "7.6.13" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.13.tgz#f11b92c6e8cd2b846b03aefaed1d81ecbe20664d" + integrity sha512-c06c27f1m9OeXUtyA0/pwVLWJo+OD9SDIaTcPtojtwt5QEtSKfhQN+b9fnq/+GXRAHdkPF13AqR0uCXJZ/9Xtw== dependencies: - "@storybook/cli" "7.6.10" + "@storybook/cli" "7.6.13" stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== strict-event-emitter@^0.2.4: version "0.2.8" @@ -13581,19 +12365,10 @@ strict-event-emitter@^0.4.3: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^1.0.1: version "1.0.2" @@ -13621,6 +12396,15 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -13631,45 +12415,55 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" side-channel "^1.0.4" string.prototype.padend@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" - integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== + version "3.1.5" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz#311ef3a4e3c557dd999cdf88fbdde223f2ac0f95" + integrity sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -13685,13 +12479,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -13713,10 +12500,17 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -13754,7 +12548,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.0.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -13771,23 +12565,19 @@ strip-literal@^1.3.0: dependencies: acorn "^8.10.0" -stylis@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== - stylis@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== sucrase@^3.20.3: - version "3.29.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.29.0.tgz#3207c5bc1b980fdae1e539df3f8a8a518236da7d" - integrity sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: + "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -13882,25 +12672,18 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.1.13: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== +tar@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -telejson@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.0.4.tgz#2e88c0af9566b4f687622ed490588312b2bec186" - integrity sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA== - dependencies: - memoizerific "^1.11.3" - telejson@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.2.0.tgz#3994f6c9a8f8d7f2dba9be2c7c5bbb447e876f32" @@ -13972,9 +12755,9 @@ throttle-debounce@^2.0.0: integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through2@^2.0.3: version "2.0.5" @@ -14000,19 +12783,19 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2: integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== tinybench@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" + integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== -tinypool@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.1.tgz#b6c4e4972ede3e3e5cda74a3da1679303d386b03" - integrity sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg== +tinypool@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" + integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== tinyspy@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.0.tgz#9dc04b072746520b432f77ea2c2d17933de5d6ce" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== tmp@^0.0.33: version "0.0.33" @@ -14046,9 +12829,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tocbot@^4.20.1: - version "4.21.6" - resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.21.6.tgz#64e3685a3cb41e23841a06eedba9ad807270190f" - integrity sha512-bAnyV6SU2n1AvuBvEgi8t7KiIn5rRiEmwFp4+elx/1ueuncAUyubITfXDMwOqStgUwh8pDzLdWgDKLicsJPikw== + version "4.25.0" + resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.25.0.tgz#bc38aea5ec8f076779bb39636f431b044129a237" + integrity sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA== toggle-selection@^1.0.6: version "1.0.6" @@ -14105,9 +12888,9 @@ tree-kill@^1.2.1, tree-kill@^1.2.2: integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== trough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-dedent@^2.0.0, ts-dedent@^2.2.0: version "2.2.0" @@ -14144,40 +12927,35 @@ tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - -"tslib@^2.4.1 || ^1.9.3": - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tss-react@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.8.2.tgz#ea424965e8a6828ac02bc8c8f2a7a75bb87cf0ac" - integrity sha512-VT2tvbnfyG5oEMUsJjyp9KPa/A+lahCju+usy8of9SnvNOWFhkVKOMcvTn8KF10ncBF0T+O+XlkcCR4Eoqw1mw== + version "4.9.4" + resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.9.4.tgz#037603ed2f8765c2f208ac1c75e9293753aa18cd" + integrity sha512-4o+XFdaTcraNEIsCRxKiEX7g6xhcsdSxfHRjos3Kg9GbYIpzfK4M2MHMETTuXT54nUrldtnkipNC003v/q5KVg== dependencies: "@emotion/cache" "*" "@emotion/serialize" "*" "@emotion/utils" "*" tsup@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.2.0.tgz#bb24c0d5e436477900c712e42adc67200607303c" - integrity sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.3.0.tgz#c7776e08c7ef55ed69def2c6e7ba4719005f5abd" + integrity sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ== dependencies: bundle-require "^4.0.0" cac "^6.7.12" chokidar "^3.5.1" debug "^4.3.1" - esbuild "^0.18.2" + esbuild "^0.19.2" execa "^5.0.0" globby "^11.0.3" joycon "^3.0.1" postcss-load-config "^4.0.1" resolve-from "^5.0.0" - rollup "^3.2.5" + rollup "^4.0.2" source-map "0.8.0-beta.0" sucrase "^3.20.3" tree-kill "^1.2.2" @@ -14245,6 +13023,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + type-fest@^2.13.0, type-fest@^2.19.0, type-fest@~2.19: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" @@ -14258,6 +13041,36 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-buffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" + integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -14297,10 +13110,10 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -ufo@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.1.tgz#e085842f4627c41d4c1b60ebea1f75cdab4ce86b" - integrity sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw== +ufo@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== uglify-js@^3.1.4: version "3.17.4" @@ -14424,9 +13237,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unload@2.2.0: version "2.2.0" @@ -14442,28 +13255,20 @@ unpipe@1.0.0, unpipe@~1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unplugin@^1.3.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" - integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== + version "1.7.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.7.1.tgz#009571e3128640f4e327f33680d2db27afaf1e11" + integrity sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw== dependencies: - acorn "^8.10.0" + acorn "^8.11.3" chokidar "^3.5.3" webpack-sources "^3.2.3" - webpack-virtual-modules "^0.5.0" + webpack-virtual-modules "^0.6.1" untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -14496,9 +13301,9 @@ url-parse@^1.5.3: requires-port "^1.0.0" use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== + version "1.3.1" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.1.tgz#9be64c3902cbd72b07fe55e56408ae3a26036fd0" + integrity sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ== dependencies: tslib "^2.0.0" @@ -14527,7 +13332,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.0, util@^0.12.3, util@^0.12.4, util@^0.12.5: +util@^0.12.3, util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -14556,9 +13361,9 @@ uuid@^8.0.0, uuid@^8.3.2: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== uvu@^0.5.0: version "0.5.6" @@ -14576,9 +13381,9 @@ v8-compile-cache-lib@^3.0.1: integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== v8-to-istanbul@^9.2.0: version "9.2.0" @@ -14635,9 +13440,9 @@ vfile@^5.0.0: vfile-message "^3.0.0" victory-vendor@^36.6.8: - version "36.6.12" - resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.6.12.tgz#17fa4d79d266a6e2bde0291c60c5002c55008164" - integrity sha512-pJrTkNHln+D83vDCCSUf0ZfxBvIaVrFHmrBOsnnLAbdqfudRACAj51He2zU94/IWq9464oTADcPVkmWAfNMwgA== + version "36.9.1" + resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.1.tgz#a7536766ca9725711c7dc1a36dd1d1d248cfa22d" + integrity sha512-+pZIP+U3pEJdDCeFmsXwHzV7vNHQC/eIbHklfe2ZCZqayYRH7lQbHcVgsJ0XOOv27hWs4jH4MONgXxHMObTMSA== dependencies: "@types/d3-array" "^3.0.3" "@types/d3-ease" "^3.0.0" @@ -14654,21 +13459,10 @@ victory-vendor@^36.6.8: d3-time "^3.0.0" d3-timer "^3.0.1" -vite-node@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.0.1.tgz#c16c9df9b5d47b74156a6501c9db5b380d992768" - integrity sha512-Y2Jnz4cr2azsOMMYuVPrQkp3KMnS/0WV8ezZjCy4hU7O5mUHCAVOnFmoEvs1nvix/4mYm74Len8bYRWZJMNP6g== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0-beta.15 || ^5.0.0" - -vite-node@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.2.0.tgz#9a359804469203a54ac49daad3065f2fd0bfb9c3" - integrity sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg== +vite-node@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.2.2.tgz#f6d329b06f9032130ae6eac1dc773f3663903c25" + integrity sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg== dependencies: cac "^6.7.14" debug "^4.3.4" @@ -14677,63 +13471,36 @@ vite-node@1.2.0: vite "^5.0.0" vite-plugin-svgr@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz#920375aaf6635091c9ac8e467825f92d32544476" - integrity sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.3.0.tgz#024f083c0f0831497d8507b82e49a8ee2b29701a" + integrity sha512-vWZMCcGNdPqgziYFKQ3Y95XP0d0YGp28+MM3Dp9cTa/px5CKcHHrIoPl2Jw81rgVm6/ZUNONzjXbZQZ7Kw66og== dependencies: - "@rollup/pluginutils" "^5.0.2" - "@svgr/core" "^7.0.0" - "@svgr/plugin-jsx" "^7.0.0" + "@rollup/pluginutils" "^5.0.4" + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" -vite@^5.0.0, "vite@^5.0.0-beta.15 || ^5.0.0", "vite@^5.0.0-beta.19 || ^5.0.0", vite@^5.0.12: - version "5.0.12" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" - integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== +vite@^5.0.0, vite@^5.0.12: + version "5.1.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.1.tgz#294e39b199d669981efc7e0261b14f78ec80819e" + integrity sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg== dependencies: esbuild "^0.19.3" - postcss "^8.4.32" + postcss "^8.4.35" rollup "^4.2.0" optionalDependencies: fsevents "~2.3.3" -vitest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.0.1.tgz#3ba1307066842bc801084fa384ce0b23941b91f7" - integrity sha512-MHsOj079S28hDsvdDvyD1pRj4dcS51EC5Vbe0xvOYX+WryP8soiK2dm8oULi+oA/8Xa/h6GoJEMTmcmBy5YM+Q== - dependencies: - "@vitest/expect" "1.0.1" - "@vitest/runner" "1.0.1" - "@vitest/snapshot" "1.0.1" - "@vitest/spy" "1.0.1" - "@vitest/utils" "1.0.1" - acorn-walk "^8.3.0" - cac "^6.7.14" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^1.3.0" - tinybench "^2.5.1" - tinypool "^0.8.1" - vite "^5.0.0-beta.19 || ^5.0.0" - vite-node "1.0.1" - why-is-node-running "^2.2.2" - -vitest@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.2.0.tgz#2ddff4a32ed992339655f243525c0e187b5af6d9" - integrity sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ== - dependencies: - "@vitest/expect" "1.2.0" - "@vitest/runner" "1.2.0" - "@vitest/snapshot" "1.2.0" - "@vitest/spy" "1.2.0" - "@vitest/utils" "1.2.0" - acorn-walk "^8.3.1" +vitest@^1.0.1, vitest@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.2.2.tgz#9e29ad2a74a5df553c30c5798c57a062d58ce299" + integrity sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw== + dependencies: + "@vitest/expect" "1.2.2" + "@vitest/runner" "1.2.2" + "@vitest/snapshot" "1.2.2" + "@vitest/spy" "1.2.2" + "@vitest/utils" "1.2.2" + acorn-walk "^8.3.2" cac "^6.7.14" chai "^4.3.10" debug "^4.3.4" @@ -14745,9 +13512,9 @@ vitest@^1.2.0: std-env "^3.5.0" strip-literal "^1.3.0" tinybench "^2.5.1" - tinypool "^0.8.1" + tinypool "^0.8.2" vite "^5.0.0" - vite-node "1.2.0" + vite-node "1.2.2" why-is-node-running "^2.2.2" w3c-xmlserializer@^4.0.0: @@ -14815,10 +13582,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" - integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== whatwg-encoding@^2.0.0: version "2.0.0" @@ -14828,9 +13595,9 @@ whatwg-encoding@^2.0.0: iconv-lite "0.6.3" whatwg-fetch@>=0.10.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^3.0.0: version "3.0.0" @@ -14873,6 +13640,24 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + which-collection@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" @@ -14884,21 +13669,20 @@ which-collection@^1.0.1: is-weakset "^2.0.1" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" + has-tostringtag "^1.0.1" which@^1.2.9: version "1.3.1" @@ -14929,7 +13713,7 @@ widest-line@^4.0.1: dependencies: string-width "^5.0.1" -word-wrap@^1.2.3, word-wrap@^1.2.4, word-wrap@~1.2.3: +word-wrap@^1.2.4, word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== @@ -14939,15 +13723,6 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -14965,6 +13740,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -15010,15 +13794,10 @@ ws@^6.1.0: dependencies: async-limiter "~1.0.0" -ws@^8.13.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - -ws@^8.2.3: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== +ws@^8.13.0, ws@^8.2.3: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== xml-name-validator@^4.0.0: version "4.0.0" @@ -15078,7 +13857,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.7.2, yaml@^2.1.1, yaml@^2.2.2, yaml@^2.3.0: +yaml@2.3.1, yaml@^1.10.0, yaml@^1.7.2, yaml@^2.2.2, yaml@^2.3.0, yaml@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== From 455f09bb2630207cd70fb7d864f0773e5747efe1 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Fri, 16 Feb 2024 10:27:07 -0500 Subject: [PATCH 03/37] fix: [M3-7758] - Linode Network Graph Tooltip - Incorrect Units (#10197) * fix tooltip unit * Added changeset: Linode Network Graph Tooltip - Incorrect Units --------- Co-authored-by: Banks Nussman --- .../pr-10197-fixed-1708020473057.md | 5 ++ .../LinodeSummary/NetworkGraphs.tsx | 59 +++++-------------- 2 files changed, 19 insertions(+), 45 deletions(-) create mode 100644 packages/manager/.changeset/pr-10197-fixed-1708020473057.md diff --git a/packages/manager/.changeset/pr-10197-fixed-1708020473057.md b/packages/manager/.changeset/pr-10197-fixed-1708020473057.md new file mode 100644 index 00000000000..1a0dfbcdaf6 --- /dev/null +++ b/packages/manager/.changeset/pr-10197-fixed-1708020473057.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +Linode Network Graph Tooltip - Incorrect Units ([#10197](https://github.com/linode/manager/pull/10197)) diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx index 0fa810b5864..45bf3fdfc01 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx @@ -1,7 +1,6 @@ import { Stats } from '@linode/api-v4/lib/linodes'; import Grid from '@mui/material/Unstable_Grid2'; import { Theme, styled, useTheme } from '@mui/material/styles'; -import { map, pathOr } from 'ramda'; import * as React from 'react'; import { AreaChart } from 'src/components/AreaChart/AreaChart'; @@ -13,14 +12,10 @@ import { formatBitsPerSecond, formatNetworkTooltip, generateNetworkUnits, + NetworkUnit, } from 'src/features/Longview/shared/utilities'; import { useFlags } from 'src/hooks/useFlags'; -import { - Metrics, - getMetrics, - getTotalTraffic, -} from 'src/utilities/statMetrics'; -import { readableBytes } from 'src/utilities/unitConversions'; +import { Metrics, getMetrics } from 'src/utilities/statMetrics'; import { StatsPanel } from './StatsPanel'; @@ -30,9 +25,6 @@ export interface TotalTrafficProps { outTraffic: string; } -const formatTotalTraffic = (value: number) => - readableBytes(value, { base10: true }).formatted; - export interface ChartProps { height: number; loading: boolean; @@ -64,7 +56,7 @@ interface NetworkStats { const _getMetrics = (data: NetworkStats) => { return { privateIn: getMetrics(data.privateIn), - privateOut: getMetrics(data.privateOut ?? []), + privateOut: getMetrics(data.privateOut), publicIn: getMetrics(data.publicIn), publicOut: getMetrics(data.publicOut), }; @@ -77,42 +69,22 @@ export const NetworkGraphs = (props: Props) => { const flags = useFlags(); const v4Data: NetworkStats = { - privateIn: pathOr([], ['data', 'netv4', 'private_in'], stats), - privateOut: pathOr([], ['data', 'netv4', 'private_out'], stats), - publicIn: pathOr([], ['data', 'netv4', 'in'], stats), - publicOut: pathOr([], ['data', 'netv4', 'out'], stats), + privateIn: stats?.data.netv4.private_in ?? [], + privateOut: stats?.data.netv4.private_out ?? [], + publicIn: stats?.data.netv4.in ?? [], + publicOut: stats?.data.netv4.out ?? [], }; const v6Data: NetworkStats = { - privateIn: pathOr([], ['data', 'netv6', 'private_in'], stats), - privateOut: pathOr([], ['data', 'netv6', 'private_out'], stats), - publicIn: pathOr([], ['data', 'netv6', 'in'], stats), - publicOut: pathOr([], ['data', 'netv6', 'out'], stats), + privateIn: stats?.data.netv6.private_in ?? [], + privateOut: stats?.data.netv6.private_out ?? [], + publicIn: stats?.data.netv6.in ?? [], + publicOut: stats?.data.netv6.out ?? [], }; const v4Metrics = _getMetrics(v4Data); const v6Metrics = _getMetrics(v6Data); - const v4totalTraffic: TotalTrafficProps = map( - formatTotalTraffic, - getTotalTraffic( - v4Metrics.publicIn.total, - v4Metrics.publicOut.total, - v4Data.publicIn.length, - v6Metrics.publicIn.total, - v6Metrics.publicOut.total - ) - ); - - const v6totalTraffic: TotalTrafficProps = map( - formatTotalTraffic, - getTotalTraffic( - v6Metrics.publicIn.total, - v6Metrics.publicOut.total, - v6Metrics.publicIn.length - ) - ); - // Convert to bytes, which is what generateNetworkUnits expects. const maxV4InBytes = Math.max( @@ -150,7 +122,6 @@ export const NetworkGraphs = (props: Props) => { ariaLabel="IPv4 Network Traffic Graph" data={v4Data} metrics={v4Metrics} - totalTraffic={v4totalTraffic} unit={v4Unit} {...commonGraphProps} /> @@ -166,7 +137,6 @@ export const NetworkGraphs = (props: Props) => { ariaLabel="IPv6 Network Traffic Graph" data={v6Data} metrics={v6Metrics} - totalTraffic={v6totalTraffic} unit={v6Unit} {...commonGraphProps} /> @@ -187,8 +157,7 @@ interface GraphProps { rangeSelection: string; theme: Theme; timezone: string; - totalTraffic: TotalTrafficProps; - unit: string; + unit: NetworkUnit; xAxisTickFormat: string; } @@ -210,7 +179,7 @@ const Graph = (props: GraphProps) => { const format = formatBitsPerSecond; const convertNetworkData = (value: number) => { - return convertNetworkToUnit(value, unit as any); + return convertNetworkToUnit(value, unit); }; /** @@ -298,7 +267,7 @@ const Graph = (props: GraphProps) => { height={420} showLegend timezone={timezone} - unit={' Kb/s'} + unit={` ${unit}/s`} /> ); From 42137a08f06e3e03f20caa03abe656f18685707b Mon Sep 17 00:00:00 2001 From: Alban Bailly <130582365+abailly-akamai@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:24:28 -0500 Subject: [PATCH 04/37] upcoming: [M3-7618] - Delete Placement Group Modal (#10162) * Initial commit: save work * Wrap up comment and add test * Cleanup * Error handling * Cleanup and more error handling * Add linode list * Add unassign logic * error handling * Test * Restore initial mock data * Cleanup * Test and story for changes in removable selection list * Added changeset: Add Delete Placement Group Modal * Invalidate related linode when removed from PG * Feedback --- ...r-10162-upcoming-features-1708036002117.md | 5 + .../RemovableSelectionsList.stories.tsx | 46 +++++ .../RemovableSelectionsList.test.tsx | 12 ++ .../RemovableSelectionsList.tsx | 40 +++-- .../TypeToConfirmDialog.tsx | 3 + .../PlacementGroupsDeleteModal.test.tsx | 125 ++++++++++++++ .../PlacementGroupsDeleteModal.tsx | 163 ++++++++++++++++++ .../PlacementGroupsDetail.tsx | 2 +- .../PlacementGroupsLanding.tsx | 9 +- .../PlacementGroupsRow.tsx | 2 +- .../PlacementGroupsUnassignModal.tsx | 6 +- .../src/features/PlacementGroups/index.tsx | 5 + packages/manager/src/mocks/serverHandlers.ts | 2 +- .../manager/src/queries/placementGroups.ts | 19 +- 14 files changed, 398 insertions(+), 41 deletions(-) create mode 100644 packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md create mode 100644 packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx create mode 100644 packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx diff --git a/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md b/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md new file mode 100644 index 00000000000..858fe9b9d8b --- /dev/null +++ b/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Add Delete Placement Group Modal ([#10162](https://github.com/linode/manager/pull/10162)) diff --git a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx index 81d5ee88869..300f3e4486b 100644 --- a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx +++ b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx @@ -110,6 +110,52 @@ export const CustomHeightAndWidth: Story = { ), }; +/** + * Example of a RemovableSelectionsList with no data to remove + */ +export const WithReadableRemoveCTA: Story = { + render: () => { + const SpecifiedLabelWrapper = () => { + const [data, setData] = React.useState(diffLabelListItems); + + const handleRemove = (item: RemovableItem) => { + setData([...data].filter((data) => data.id !== item.id)); + }; + + const resetList = () => { + setData([...diffLabelListItems]); + }; + + return ( + <> + ( + ({ + fontFamily: theme.font.normal, + fontSize: '0.875rem', + })} + variant="text" + > + Remove + + )} + headerText="Linodes to remove" + noDataText="No Linodes available" + onRemove={handleRemove} + selectionData={data} + /> + + Reset list + + > + ); + }; + + return ; + }, +}; + /** * Example of a RemovableSelectionsList with no data to remove */ diff --git a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx index 9eae742e28a..89bbf72f9d4 100644 --- a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx +++ b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx @@ -3,6 +3,7 @@ import * as React from 'react'; import { renderWithTheme } from 'src/utilities/testHelpers'; +import { Button } from '../Button/Button'; import { RemovableSelectionsList } from './RemovableSelectionsList'; const defaultList = Array.from({ length: 5 }, (_, index) => { @@ -89,4 +90,15 @@ describe('Removable Selections List', () => { const removeButton = screen.queryByLabelText(`remove my-linode-1`); expect(removeButton).not.toBeInTheDocument(); }); + + it('should render the remove button as text when removeButtonText is declared', () => { + const { queryAllByText } = renderWithTheme( + Remove Linode} + isRemovable + /> + ); + expect(queryAllByText('Remove Linode')).toHaveLength(5); + }); }); diff --git a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx index ec09036a215..9bcf7c8ad12 100644 --- a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx +++ b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx @@ -15,6 +15,7 @@ import { } from './RemovableSelectionsList.style'; import type { SxProps, Theme } from '@mui/material'; +import type { ButtonProps } from 'src/components/Button/Button'; export type RemovableItem = { id: number; @@ -29,6 +30,11 @@ export interface RemovableSelectionsListProps { * The custom label component */ LabelComponent?: React.ComponentType<{ selection: RemovableItem }>; + /** + * Overrides the render of the X Button + * Has no effect if isRemovable is false + */ + RemoveButton?: (props: ButtonProps) => JSX.Element; /** * The descriptive text to display above the list */ @@ -78,6 +84,7 @@ export const RemovableSelectionsList = ( ) => { const { LabelComponent, + RemoveButton, headerText, id, isRemovable = true, @@ -115,9 +122,9 @@ export const RemovableSelectionsList = ( > {selectionData.map((selection) => ( @@ -130,20 +137,23 @@ export const RemovableSelectionsList = ( selection.label )} - {isRemovable && ( - handleOnClick(selection)} - size="medium" - > - - - )} + {isRemovable && + (RemoveButton ? ( + handleOnClick(selection)} /> + ) : ( + handleOnClick(selection)} + size="medium" + > + + + ))} ))} diff --git a/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx b/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx index bd6a89ab5c7..883a2d5cc48 100644 --- a/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx +++ b/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx @@ -25,6 +25,7 @@ interface EntityInfo { | 'Linode' | 'Load Balancer' | 'NodeBalancer' + | 'Placement Group' | 'Subnet' | 'VPC' | 'Volume'; @@ -49,6 +50,7 @@ export const TypeToConfirmDialog = (props: CombinedProps) => { children, entity, errors, + inputProps, label, loading, onClick, @@ -120,6 +122,7 @@ export const TypeToConfirmDialog = (props: CombinedProps) => { data-testid={'dialog-confirm-text-input'} expand hideInstructions={entity.subType === 'CloseAccount'} + inputProps={inputProps} label={label} placeholder={entity.subType === 'CloseAccount' ? 'Username' : ''} textFieldStyle={textFieldStyle} diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx new file mode 100644 index 00000000000..929e4f21f55 --- /dev/null +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx @@ -0,0 +1,125 @@ +import { fireEvent } from '@testing-library/react'; +import * as React from 'react'; + +import { linodeFactory, placementGroupFactory } from 'src/factories'; +import { renderWithTheme } from 'src/utilities/testHelpers'; + +import { PlacementGroupsDeleteModal } from './PlacementGroupsDeleteModal'; + +const queryMocks = vi.hoisted(() => ({ + useAllLinodesQuery: vi.fn().mockReturnValue({}), + useDeletePlacementGroup: vi.fn().mockReturnValue({ + mutateAsync: vi.fn().mockResolvedValue({}), + reset: vi.fn(), + }), + useParams: vi.fn().mockReturnValue({}), + usePlacementGroupQuery: vi.fn().mockReturnValue({}), +})); + +vi.mock('react-router-dom', async () => { + const actual = await vi.importActual('react-router-dom'); + return { + ...actual, + useParams: queryMocks.useParams, + }; +}); + +vi.mock('src/queries/placementGroups', async () => { + const actual = await vi.importActual('src/queries/placementGroups'); + return { + ...actual, + useDeletePlacementGroup: queryMocks.useDeletePlacementGroup, + usePlacementGroupQuery: queryMocks.usePlacementGroupQuery, + }; +}); + +vi.mock('src/queries/linodes/linodes', async () => { + const actual = await vi.importActual('src/queries/linodes/linodes'); + return { + ...actual, + useAllLinodesQuery: queryMocks.useAllLinodesQuery, + }; +}); + +const props = { + onClose: vi.fn(), + open: true, +}; + +describe('PlacementGroupsDeleteModal', () => { + beforeAll(() => { + queryMocks.useParams.mockReturnValue({ + id: '1', + }); + queryMocks.useAllLinodesQuery.mockReturnValue({ + data: [ + linodeFactory.build({ + id: 1, + label: 'test-linode', + }), + ], + }); + }); + + it('should render the right form elements', () => { + queryMocks.usePlacementGroupQuery.mockReturnValue({ + data: placementGroupFactory.build({ + affinity_type: 'anti_affinity', + id: 1, + label: 'PG-to-delete', + linode_ids: [1], + }), + }); + + const { getByRole, getByTestId, getByText } = renderWithTheme( + + ); + + expect( + getByRole('heading', { + name: 'Delete Placement Group PG-to-delete (Anti-affinity)', + }) + ).toBeInTheDocument(); + expect( + getByText( + 'Linodes assigned to Placement Group PG-to-delete (Anti-affinity)' + ) + ).toBeInTheDocument(); + expect(getByTestId('assigned-linodes')).toContainElement( + getByText('test-linode') + ); + expect(getByTestId('textfield-input')).toBeDisabled(); + expect(getByRole('button', { name: 'Close' })).toBeInTheDocument(); + expect(getByRole('button', { name: 'Cancel' })).toBeInTheDocument(); + expect(getByRole('button', { name: 'Delete' })).toBeDisabled(); + }); + + it("should be enabled when there's no assigned linodes", () => { + queryMocks.usePlacementGroupQuery.mockReturnValue({ + data: placementGroupFactory.build({ + affinity_type: 'anti_affinity', + id: 1, + label: 'PG-to-delete', + linode_ids: [], + }), + }); + const { getByRole, getByTestId, getByText } = renderWithTheme( + + ); + + expect(getByText('No Linodes assigned to this Placement Group.')); + + const textField = getByTestId('textfield-input'); + const deleteButton = getByRole('button', { name: 'Delete' }); + + expect(textField).toBeEnabled(); + expect(deleteButton).toBeDisabled(); + + fireEvent.change(textField, { target: { value: 'PG-to-delete' } }); + + expect(deleteButton).toBeEnabled(); + fireEvent.click(deleteButton); + + expect(queryMocks.useDeletePlacementGroup).toHaveBeenCalled(); + }); +}); diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx new file mode 100644 index 00000000000..af7c99be0f4 --- /dev/null +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx @@ -0,0 +1,163 @@ +import { AFFINITY_TYPES } from '@linode/api-v4'; +import * as React from 'react'; +import { useParams } from 'react-router-dom'; + +import { Button } from 'src/components/Button/Button'; +import { List } from 'src/components/List'; +import { ListItem } from 'src/components/ListItem'; +import { Notice } from 'src/components/Notice/Notice'; +import { RemovableSelectionsList } from 'src/components/RemovableSelectionsList/RemovableSelectionsList'; +import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog'; +import { Typography } from 'src/components/Typography'; +import { usePlacementGroupData } from 'src/hooks/usePlacementGroupsData'; +import { + useDeletePlacementGroup, + usePlacementGroupQuery, + useUnassignLinodesFromPlacementGroup, +} from 'src/queries/placementGroups'; + +import type { + Linode, + UnassignLinodesFromPlacementGroupPayload, +} from '@linode/api-v4'; + +interface Props { + onClose: () => void; + open: boolean; +} + +export const PlacementGroupsDeleteModal = (props: Props) => { + const { onClose, open } = props; + const { id } = useParams<{ id: string }>(); + const { data: selectedPlacementGroup } = usePlacementGroupQuery(+id); + const { + assignedLinodes, + isLoading: placementGroupDataLoading, + linodesCount: assignedLinodesCount, + } = usePlacementGroupData({ + placementGroup: selectedPlacementGroup, + }); + const { + error: deletePlacementError, + isLoading: deletePlacementLoading, + mutateAsync: deletePlacementGroup, + reset: resetDeletePlacementGroup, + } = useDeletePlacementGroup(selectedPlacementGroup?.id ?? -1); + const { + error: unassignLinodeError, + isLoading: unassignLinodeLoading, + mutateAsync: unassignLinodes, + reset: resetUnassignLinodes, + } = useUnassignLinodesFromPlacementGroup(selectedPlacementGroup?.id ?? -1); + + const error = deletePlacementError || unassignLinodeError; + + React.useEffect(() => { + if (open) { + resetDeletePlacementGroup(); + resetUnassignLinodes(); + } + }, [open, resetUnassignLinodes, resetDeletePlacementGroup]); + + const handleUnassignLinode = async (linode: Linode) => { + const payload: UnassignLinodesFromPlacementGroupPayload = { + linodes: [linode.id], + }; + + await unassignLinodes(payload); + }; + + const onDelete = async () => { + await deletePlacementGroup(); + onClose(); + }; + + const placementGroupLabel = selectedPlacementGroup + ? `Placement Group ${selectedPlacementGroup?.label} (${ + AFFINITY_TYPES[selectedPlacementGroup.affinity_type] + })` + : 'Placement Group'; + + const isDisabled = !selectedPlacementGroup || assignedLinodesCount > 0; + + return ( + + {error && ( + + )} + + + + Warning: + + ({ + '& > li': { + display: 'list-item', + fontSize: '0.875rem', + pb: 0, + pl: 0, + }, + listStyle: 'disc', + ml: theme.spacing(2), + mt: theme.spacing(), + })} + > + + Deleting a placement group is permanent and cannot be undone. + + + You need to unassign all Linodes before deleting a placement group. + + + + ( + ({ + fontFamily: theme.font.normal, + fontSize: '0.875rem', + })} + loading={unassignLinodeLoading} + variant="text" + > + Unassign + + )} + headerText={`Linodes assigned to ${placementGroupLabel}`} + id="assigned-linodes" + maxWidth={540} + noDataText="No Linodes assigned to this Placement Group." + onRemove={handleUnassignLinode} + selectionData={assignedLinodes ?? []} + sx={{ mb: 3, mt: 1 }} + /> + + ); +}; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx index 8cddb981a5d..ff2e103a72b 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx @@ -26,7 +26,7 @@ export const PlacementGroupsDetail = () => { const flags = useFlags(); const { id, tab } = useParams<{ id: string; tab?: string }>(); const history = useHistory(); - const placementGroupId = Number(id); + const placementGroupId = +id; const { data: placementGroup, diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx index df3e582ed2e..9728225396e 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx @@ -22,6 +22,7 @@ import { usePlacementGroupsQuery } from 'src/queries/placementGroups'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; import { PlacementGroupsCreateDrawer } from '../PlacementGroupsCreateDrawer'; +import { PlacementGroupsDeleteModal } from '../PlacementGroupsDeleteModal'; import { PlacementGroupsRenameDrawer } from '../PlacementGroupsRenameDrawer'; import { PlacementGroupsLandingEmptyState } from './PlacementGroupsLandingEmptyState'; import { PlacementGroupsRow } from './PlacementGroupsRow'; @@ -75,15 +76,16 @@ export const PlacementGroupsLanding = React.memo(() => { const handleDeletePlacementGroup = (placementGroup: PlacementGroup) => { setSelectedPlacementGroup(placementGroup); + history.replace(`/placement-groups/delete/${placementGroup.id}`); }; const onClosePlacementGroupDrawer = () => { history.replace('/placement-groups'); - setSelectedPlacementGroup(undefined); }; const isPlacementGroupCreateDrawerOpen = location.pathname.endsWith('create'); const isPlacementGroupRenameDrawerOpen = location.pathname.includes('rename'); + const isPlacementGroupDeleteModalOpen = location.pathname.includes('delete'); if (isLoading) { return ; @@ -206,7 +208,10 @@ export const PlacementGroupsLanding = React.memo(() => { open={isPlacementGroupRenameDrawerOpen} selectedPlacementGroup={selectedPlacementGroup} /> - {/* TODO VM_Placement: add delete dialog */} + > ); }); diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx index d8bc510db5a..55d778aae5f 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx @@ -1,9 +1,9 @@ import { AFFINITY_TYPES } from '@linode/api-v4'; import React from 'react'; -import { Link } from 'react-router-dom'; import { Hidden } from 'src/components/Hidden'; import { InlineMenuAction } from 'src/components/InlineMenuAction/InlineMenuAction'; +import { Link } from 'src/components/Link'; import { List } from 'src/components/List'; import { ListItem } from 'src/components/ListItem'; import { TableCell } from 'src/components/TableCell'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx index 9f6093f7cc5..3d1ac69bb1c 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx @@ -25,11 +25,11 @@ export const PlacementGroupsUnassignModal = (props: Props) => { error, isLoading, mutateAsync: unassignLinodes, - } = useUnassignLinodesFromPlacementGroup(Number(placementGroupId) ?? -1); - const { data: selectedLinode } = useLinodeQuery(Number(linodeId) ?? -1); + } = useUnassignLinodesFromPlacementGroup(+placementGroupId ?? -1); + const { data: selectedLinode } = useLinodeQuery(+linodeId ?? -1); const payload: UnassignLinodesFromPlacementGroupPayload = { - linodes: [Number(linodeId) ?? -1], + linodes: [+linodeId ?? -1], }; const onUnassign = async () => { diff --git a/packages/manager/src/features/PlacementGroups/index.tsx b/packages/manager/src/features/PlacementGroups/index.tsx index 5a94d394c1c..b8e2e1f3b2b 100644 --- a/packages/manager/src/features/PlacementGroups/index.tsx +++ b/packages/manager/src/features/PlacementGroups/index.tsx @@ -36,6 +36,11 @@ export const PlacementGroups = () => { exact path={`${path}/rename/:id`} /> + { - if (req.params.placementGroupId === 'undefined') { + if (req.params.placementGroupId === '-1') { return res(ctx.status(404)); } diff --git a/packages/manager/src/queries/placementGroups.ts b/packages/manager/src/queries/placementGroups.ts index 3f2e1f26108..a1952724458 100644 --- a/packages/manager/src/queries/placementGroups.ts +++ b/packages/manager/src/queries/placementGroups.ts @@ -17,7 +17,6 @@ import { useMutation, useQuery, useQueryClient } from 'react-query'; import { getAll } from 'src/utilities/getAll'; -import { queryKey as LINODES_QUERY_KEY } from './linodes/linodes'; import { queryKey as PROFILE_QUERY_KEY } from './profile'; import type { @@ -119,23 +118,7 @@ export const useAssignLinodesToPlacementGroup = (placementGroupId: number) => { >({ mutationFn: (data) => assignLinodesToPlacementGroup(placementGroupId, data), onSuccess: (updatedPlacementGroup) => { - // Invalidate placement group linodes - queryClient.invalidateQueries([ - queryKey, - 'placement-group', - placementGroupId, - 'linodes', - ]); - - // Invalidate linode placement group data - queryClient.invalidateQueries([ - LINODES_QUERY_KEY, - 'linode', - updatedPlacementGroup.linode_ids[0], - 'placement_groups', - ]); - - // Set the updated placement group + queryClient.invalidateQueries([queryKey, 'paginated']); queryClient.setQueryData( [queryKey, 'placement-group', placementGroupId], updatedPlacementGroup From 8e5bb022d9da372aac18737f60068eb229619205 Mon Sep 17 00:00:00 2001 From: cpathipa <119517080+cpathipa@users.noreply.github.com> Date: Fri, 16 Feb 2024 13:34:06 -0600 Subject: [PATCH 05/37] upcoming: [M3-7694] - OBJ Multi Cluster Copy updates (#10188) * Remove text "S3 Endpoint" * Update Error message in Add / Edit Access Key Drawer * Add tooltip and change column name "None" to "No Access" * Added changeset: OBJ Multi Cluster Copy updates. * Update packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> * Update packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> * Hide copy all when one host name exists * Adjust styles for hostname label * Adjust padding --------- Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> --- ...r-10188-upcoming-features-1707837776464.md | 5 +++ .../AccessKeyTable/AccessKeyTable.tsx | 5 +-- .../BucketPermissionsTable.tsx | 11 +++-- .../{CopyAll.tsx => CopyAllHostnames.tsx} | 40 ++++++++++--------- .../AccessKeyLanding/HostNamesDrawer.test.tsx | 4 +- .../AccessKeyLanding/HostNamesDrawer.tsx | 12 ++---- .../LimitedAccessControls.tsx | 31 +++++++++++++- .../AccessKeyLanding/OMC_AccessKeyDrawer.tsx | 22 ++++++++-- .../SecretTokenDialog/SecretTokenDialog.tsx | 26 +++++++----- .../src/objectStorageKeys.schema.ts | 7 +++- 10 files changed, 113 insertions(+), 50 deletions(-) create mode 100644 packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md rename packages/manager/src/features/ObjectStorage/AccessKeyLanding/{CopyAll.tsx => CopyAllHostnames.tsx} (50%) diff --git a/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md b/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md new file mode 100644 index 00000000000..c61aa78b755 --- /dev/null +++ b/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Update OBJ Multi-Cluster copy ([#10188](https://github.com/linode/manager/pull/10188)) diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx index 44120fe3f69..3a609d63c13 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx @@ -7,19 +7,16 @@ import { styled } from '@mui/material/styles'; import React, { useState } from 'react'; import { Table } from 'src/components/Table'; - +import { TableBody } from 'src/components/TableBody'; import { TableCell } from 'src/components/TableCell'; import { TableHead } from 'src/components/TableHead'; import { TableRow } from 'src/components/TableRow'; -import { TableBody } from 'src/components/TableBody'; - import { useAccountManagement } from 'src/hooks/useAccountManagement'; import { useFlags } from 'src/hooks/useFlags'; import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; import { HostNamesDrawer } from '../HostNamesDrawer'; import { OpenAccessDrawer } from '../types'; - import { AccessKeyTableBody } from './AccessKeyTableBody'; export interface AccessKeyTableProps { diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx index bb3e41a7dc0..9995bade45d 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx @@ -86,13 +86,15 @@ export const BucketPermissionsTable = React.memo((props: Props) => { return ( Region Bucket - None + + No Access + Read Only @@ -170,7 +172,10 @@ export const BucketPermissionsTable = React.memo((props: Props) => { key={scopeName} mode={mode} > - + {regionsLookup[thisScope.region ?? '']?.label} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAll.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames.tsx similarity index 50% rename from packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAll.tsx rename to packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames.tsx index 521b73b7788..a2949093775 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAll.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames.tsx @@ -8,12 +8,13 @@ import { InputLabel } from 'src/components/InputLabel'; import { Tooltip } from 'src/components/Tooltip'; export interface Props { + hideShowAll?: boolean; text: string; } -export const CopyAll = (props: Props) => { +export const CopyAllHostnames = (props: Props) => { const [copied, setCopied] = React.useState(false); - const { text } = props; + const { hideShowAll = false, text } = props; const handleIconClick = () => { setCopied(true); @@ -23,28 +24,31 @@ export const CopyAll = (props: Props) => { return ( - S3 Endpoint Hostnames - - S3 Endpoint Hostnames + {!hideShowAll && ( + - Copy all - - + + Copy all + + + )} ); }; const StyledBox = styled(Box, { label: 'StyledBox' })(({ theme }) => ({ - borderColor: theme.name === 'light' ? '#ccc' : '#222', + borderColor: theme.name === 'light' ? theme.color.grey3 : theme.color.black, display: 'flex', justifyContent: 'space-between', + marginBottom: theme.spacing(1), })); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx index e0625281e98..7aac34288ce 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx @@ -53,12 +53,12 @@ describe('HostNamesDrawer', () => { ).toBeInTheDocument(); expect( screen.getByRole('button', { - name: 'Copy S3 Endpoint: Atlanta, GA: endpoint2 to clipboard', + name: 'Copy Atlanta, GA: endpoint2 to clipboard', }) ).toBeInTheDocument(); expect( screen.getByRole('button', { - name: 'Copy S3 Endpoint: Newark, NJ: endpoint1 to clipboard', + name: 'Copy Newark, NJ: endpoint1 to clipboard', }) ).toBeInTheDocument(); }); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx index d5534b13e31..9fd21ecd033 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx @@ -7,7 +7,7 @@ import { Drawer } from 'src/components/Drawer'; import { useRegionsQuery } from 'src/queries/regions'; import { getRegionsByRegionId } from 'src/utilities/regions'; -import { CopyAll } from './CopyAll'; +import { CopyAllHostnames } from './CopyAllHostnames'; interface Props { onClose: () => void; @@ -27,14 +27,12 @@ export const HostNamesDrawer = (props: Props) => { return ( ({ marginTop: theme.spacing(3) })}> - - `S3 Endpoint: ${regionsLookup[region.id]?.label}: ${ - region.s3_endpoint - }` + `${regionsLookup[region.id]?.label}: ${region.s3_endpoint}` ) .join('\n') ?? '' } @@ -49,13 +47,11 @@ export const HostNamesDrawer = (props: Props) => { > {regions.map((region, index) => ( ))} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx index ccab6a2e5c4..04d70a725cc 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx @@ -6,12 +6,28 @@ import { Toggle } from 'src/components/Toggle/Toggle'; import { Typography } from 'src/components/Typography'; import { useAccountManagement } from 'src/hooks/useAccountManagement'; import { useFlags } from 'src/hooks/useFlags'; +import { TooltipIcon } from 'src/components/TooltipIcon'; import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; import { AccessTable } from './AccessTable'; import { BucketPermissionsTable } from './BucketPermissionsTable'; import { MODE } from './types'; +type LabelWithTooltipProps = { + labelText: string; + tooltipText: string; +}; + +const LabelWithTooltip = ({ + labelText, + tooltipText, +}: LabelWithTooltipProps) => ( + + {labelText} + {tooltipText && } + +); + interface Props { bucket_access: Scope[] | null; checked: boolean; @@ -36,6 +52,10 @@ export const LimitedAccessControls = React.memo((props: Props) => { return ( <> ({ + marginTop: theme.spacing(0.5), + marginBottom: theme.spacing(0.5), + })} control={ { onChange={handleToggle} /> } - label={'Limited Access'} + label={ + isObjMultiClusterEnabled ? ( + + ) : ( + 'Limited Access' + ) + } /> Limited access keys can list all buckets, regardless of access. They can diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx index a99f0d036ab..6231553e59a 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx @@ -7,8 +7,11 @@ import { Scope, UpdateObjectStorageKeyRequest, } from '@linode/api-v4/lib/object-storage'; -import { createObjectStorageKeysSchema } from '@linode/validation/lib/objectStorageKeys.schema'; -import { useFormik, FormikProps } from 'formik'; +import { + createObjectStorageKeysSchema, + updateObjectStorageKeysSchema, +} from '@linode/validation/lib/objectStorageKeys.schema'; +import { FormikProps, useFormik } from 'formik'; import React, { useEffect, useState } from 'react'; import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel'; @@ -166,7 +169,9 @@ export const OMC_AccessKeyDrawer = (props: AccessKeyDrawerProps) => { }, validateOnBlur: true, validateOnChange: false, - validationSchema: createObjectStorageKeysSchema, + validationSchema: createMode + ? createObjectStorageKeysSchema + : updateObjectStorageKeysSchema, }); const isSaveDisabled = @@ -295,6 +300,17 @@ export const OMC_AccessKeyDrawer = (props: AccessKeyDrawerProps) => { required selectedRegion={formik.values.regions} /> + {createMode && ( + ({ + marginTop: theme.spacing(2), + })} + > + Unlimited S3 access key can be used to create buckets in the + selected region using S3 Endpoint returned on successful creation + of the key. + + )} {createMode && !bucketsError && ( { const { objectStorageKey, onClose, open, title, value } = props; + const { data: regionsData } = useRegionsQuery(); + const regionsLookup = regionsData && getRegionsByRegionId(regionsData); + const flags = useFlags(); const { account } = useAccountManagement(); @@ -73,11 +78,17 @@ export const SecretTokenDialog = (props: Props) => { /> {isObjMultiClusterEnabled && ( - `S3 Endpoint: ${region.id}: ${region.s3_endpoint}` + (region) => + `${regionsLookup?.[region.id]?.label}: ${ + region.s3_endpoint + }` ) .join('\n') ?? '' } @@ -87,23 +98,20 @@ export const SecretTokenDialog = (props: Props) => { {isObjMultiClusterEnabled && ( ({ - '.copyIcon': { - marginRight: 0, - paddingRight: 0, - }, backgroundColor: theme.bg.main, border: `1px solid ${theme.color.grey3}`, borderColor: theme.name === 'light' ? '#ccc' : '#222', - padding: theme.spacing(1), })} > {objectStorageKey?.regions.map((region, index) => ( ))} diff --git a/packages/validation/src/objectStorageKeys.schema.ts b/packages/validation/src/objectStorageKeys.schema.ts index b15dfe2ace8..4cb404e60ba 100644 --- a/packages/validation/src/objectStorageKeys.schema.ts +++ b/packages/validation/src/objectStorageKeys.schema.ts @@ -10,7 +10,7 @@ export const createObjectStorageKeysSchema = object({ .trim(), regions: array() .of(string()) - .min(1, 'Regions must include at least one region') + .min(1, 'Select at least one region to continue') .notRequired(), }); @@ -22,6 +22,9 @@ export const updateObjectStorageKeysSchema = object({ .trim(), regions: array() .of(string()) - .min(1, 'Regions must include at least one region') + .min( + 1, + 'You need to select at least one region. To delete all keys, go to the Access Keys page in Cloud Manager and select Revoke.' + ) .notRequired(), }); From 9e03e40d6ff72d9535d55d2fd98c2e400f7dbed7 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:59:31 -0700 Subject: [PATCH 06/37] upcoming: [M3-7775] - Disable ability to edit or delete a proxy user via User Profile page (#10202) * Disable fields and buttons on proxy user's user profile page * Separate Display and User Profile test specs; add coverage * Finish test coverage * Clean up * Meant to push the changesets too * Remove proxy user language --- .../pr-10202-tests-1708119481596.md | 5 + ...r-10202-upcoming-features-1708119409383.md | 5 + ...rname.spec.ts => display-settings.spec.ts} | 54 +--- .../e2e/core/account/user-profile.spec.ts | 283 ++++++++++++++++++ .../manager/src/features/Account/constants.ts | 3 + .../DisplaySettings/DisplaySettings.tsx | 8 +- .../src/features/Users/UserProfile.tsx | 45 +-- 7 files changed, 329 insertions(+), 74 deletions(-) create mode 100644 packages/manager/.changeset/pr-10202-tests-1708119481596.md create mode 100644 packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md rename packages/manager/cypress/e2e/core/account/{change-username.spec.ts => display-settings.spec.ts} (73%) create mode 100644 packages/manager/cypress/e2e/core/account/user-profile.spec.ts diff --git a/packages/manager/.changeset/pr-10202-tests-1708119481596.md b/packages/manager/.changeset/pr-10202-tests-1708119481596.md new file mode 100644 index 00000000000..3017a0cdc53 --- /dev/null +++ b/packages/manager/.changeset/pr-10202-tests-1708119481596.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tests +--- + +Improve User Profile integration test coverage and separate from Display Settings coverage ([#10202](https://github.com/linode/manager/pull/10202)) diff --git a/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md b/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md new file mode 100644 index 00000000000..1d906c12174 --- /dev/null +++ b/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Disable ability to edit or delete a proxy user via User Profile page ([#10202](https://github.com/linode/manager/pull/10202)) diff --git a/packages/manager/cypress/e2e/core/account/change-username.spec.ts b/packages/manager/cypress/e2e/core/account/display-settings.spec.ts similarity index 73% rename from packages/manager/cypress/e2e/core/account/change-username.spec.ts rename to packages/manager/cypress/e2e/core/account/display-settings.spec.ts index a0374fc698f..a08f8e04b94 100644 --- a/packages/manager/cypress/e2e/core/account/change-username.spec.ts +++ b/packages/manager/cypress/e2e/core/account/display-settings.spec.ts @@ -8,10 +8,7 @@ import { makeFeatureFlagData } from 'support/util/feature-flags'; import { mockGetProfile } from 'support/intercepts/profile'; import { getProfile } from 'support/api/account'; import { interceptGetProfile } from 'support/intercepts/profile'; -import { - interceptGetUser, - mockUpdateUsername, -} from 'support/intercepts/account'; +import { mockUpdateUsername } from 'support/intercepts/account'; import { ui } from 'support/ui'; import { randomString } from 'support/util/random'; @@ -59,54 +56,7 @@ const verifyUsernameAndEmail = ( } }; -describe('username', () => { - /* - * - Validates username update flow via the user profile page using mocked data. - */ - it('can change username via user profile page', () => { - const newUsername = randomString(12); - - getProfile().then((profile) => { - const username = profile.body.username; - - interceptGetUser(username).as('getUser'); - mockUpdateUsername(username, newUsername).as('updateUsername'); - - cy.visitWithLogin(`account/users/${username}`); - cy.wait('@getUser'); - - cy.findByText('Username').should('be.visible'); - cy.findByText('Email').should('be.visible'); - cy.findByText('Delete User').should('be.visible'); - - cy.get('[id="username"]') - .should('be.visible') - .should('have.value', username) - .clear() - .type(newUsername); - - cy.get('[data-qa-textfield-label="Username"]') - .parent() - .parent() - .parent() - .within(() => { - ui.button - .findByTitle('Save') - .should('be.visible') - .should('be.enabled') - .click(); - }); - - cy.wait('@updateUsername'); - - // No confirmation gets shown on this page when changes are saved. - // Confirm that the text field has the correct value instead. - cy.get('[id="username"]') - .should('be.visible') - .should('have.value', newUsername); - }); - }); - +describe('Display Settings', () => { /* * - Validates username update flow via the profile display page using mocked data. */ diff --git a/packages/manager/cypress/e2e/core/account/user-profile.spec.ts b/packages/manager/cypress/e2e/core/account/user-profile.spec.ts new file mode 100644 index 00000000000..a7ffc031bc6 --- /dev/null +++ b/packages/manager/cypress/e2e/core/account/user-profile.spec.ts @@ -0,0 +1,283 @@ +import { accountUserFactory } from 'src/factories/accountUsers'; +import { getProfile } from 'support/api/account'; +import { + interceptGetUser, + mockGetUser, + mockGetUsers, + mockUpdateUsername, +} from 'support/intercepts/account'; +import { randomString } from 'support/util/random'; +import { ui } from 'support/ui'; +import { mockUpdateProfile } from 'support/intercepts/profile'; + +describe('User Profile', () => { + /* + * - Validates the flow of updating the username and email of the active account user via the User Profile page using mocked data. + */ + it('can change email and username of the active account', () => { + const newUsername = randomString(12); + const newEmail = `${newUsername}@example.com`; + + getProfile().then((profile) => { + const activeUsername = profile.body.username; + const activeEmail = profile.body.email; + + interceptGetUser(activeUsername).as('getUser'); + mockUpdateUsername(activeUsername, newUsername).as('updateUsername'); + mockUpdateProfile({ + ...profile.body, + email: newEmail, + }).as('updateEmail'); + + cy.visitWithLogin(`account/users/${activeUsername}`); + cy.wait('@getUser'); + + cy.findByText('Username').should('be.visible'); + cy.findByText('Email').should('be.visible'); + cy.findByText('Delete User').should('be.visible'); + + // Confirm the currently active user cannot be deleted. + ui.button + .findByTitle('Delete') + .should('be.visible') + .should('be.disabled') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('You can\u{2019}t delete the currently active user.') + .should('be.visible'); + + // Confirm user can update their email before updating the username, since you cannot update a different user's (as determined by username) email. + cy.get('[id="email"]') + .should('be.visible') + .should('have.value', activeEmail) + .clear() + .type(newEmail); + + cy.get('[data-qa-textfield-label="Email"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + cy.wait('@updateEmail'); + + // Confirm success notice displays. + cy.findByText('Email updated successfully').should('be.visible'); + + // Confirm user can update their username. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', activeUsername) + .clear() + .type(newUsername); + + cy.get('[data-qa-textfield-label="Username"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + cy.wait('@updateUsername'); + + // No confirmation gets shown on this page when changes are saved. + // Confirm that the text field has the correct value instead. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', newUsername); + }); + }); + + /* + * - Validates the flow of updating the username and email of another user via the User Profile page using mocked data. + */ + it('can change the username but not email of another user account', () => { + const newUsername = randomString(12); + + getProfile().then((profile) => { + const additionalUsername = 'mock_user2'; + const mockAccountUsers = accountUserFactory.buildList(1, { + username: additionalUsername, + }); + const additionalUser = mockAccountUsers[0]; + + mockGetUsers(mockAccountUsers).as('getUsers'); + mockGetUser(additionalUser).as('getUser'); + mockUpdateUsername(additionalUsername, newUsername).as('updateUsername'); + + cy.visitWithLogin(`account/users/${additionalUsername}`); + + cy.wait('@getUser'); + + cy.findByText('Username').should('be.visible'); + cy.findByText('Email').should('be.visible'); + cy.findByText('Delete User').should('be.visible'); + ui.button.findByTitle('Delete').should('be.visible').should('be.enabled'); + + // Confirm email of another user cannot be updated. + cy.get('[id="email"]') + .should('be.visible') + .should('have.value', additionalUser.email) + .should('be.disabled') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByAttribute('data-qa-help-button', 'true') + .should('be.visible') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText( + 'You can\u{2019}t change another user\u{2019}s email address.' + ) + .should('be.visible'); + }); + + cy.get('[data-qa-textfield-label="Email"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.disabled') + .click(); + }); + + // Confirm username of another user can be updated. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', additionalUsername) + .clear() + .type(newUsername); + + cy.get('[data-qa-textfield-label="Username"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + cy.wait('@updateUsername'); + + // No confirmation gets shown on this page when changes are saved. + // Confirm that the text field has the correct value instead. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', newUsername); + }); + }); + + /* + * - Validates disabled username and email flow for a proxy user via the User Profile page using mocked data. + */ + it('cannot change username or email for a proxy user or delete the proxy user', () => { + getProfile().then((profile) => { + const proxyUsername = 'proxy_user'; + const mockAccountUsers = accountUserFactory.buildList(1, { + username: proxyUsername, + user_type: 'proxy', + }); + + mockGetUsers(mockAccountUsers).as('getUsers'); + mockGetUser(mockAccountUsers[0]).as('getUser'); + + cy.visitWithLogin(`account/users/${proxyUsername}`); + + cy.wait('@getUser'); + + cy.findByText('Username').should('be.visible'); + cy.findByText('Email').should('be.visible'); + cy.findByText('Delete User').should('be.visible'); + + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', proxyUsername) + .should('be.disabled') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByAttribute('data-qa-help-button', 'true') + .should('be.visible') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('This account type cannot update this field.') + .should('be.visible'); + }); + + cy.get('[data-qa-textfield-label="Username"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.disabled'); + }); + + cy.get('[id="email"]') + .should('be.visible') + .should('be.disabled') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByAttribute('data-qa-help-button', 'true') + .should('be.visible') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('This account type cannot update this field.') + .should('be.visible'); + }); + + cy.get('[data-qa-textfield-label="Email"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.disabled') + .click(); + }); + + // Confirms the proxy user cannot be deleted. + ui.button + .findByTitle('Delete') + .should('be.visible') + .should('be.disabled') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('You can\u{2019}t delete a business partner user.') + .should('be.visible'); + }); + }); +}); diff --git a/packages/manager/src/features/Account/constants.ts b/packages/manager/src/features/Account/constants.ts index 0bb075f38d4..83ac50faa9c 100644 --- a/packages/manager/src/features/Account/constants.ts +++ b/packages/manager/src/features/Account/constants.ts @@ -22,3 +22,6 @@ export const CHILD_USER_CLOSE_ACCOUNT_TOOLTIP_TEXT = // TODO: Parent/Child: Requires updated copy... export const PARENT_SESSION_EXPIRED = 'Session expired. Please log in again to your business partner account.'; + +export const RESTRICTED_FIELD_TOOLTIP = + 'This account type cannot update this field.'; diff --git a/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx b/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx index cd45bec69f9..d86f9f66760 100644 --- a/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx +++ b/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx @@ -18,6 +18,7 @@ import { useMutateProfile, useProfile } from 'src/queries/profile'; import { ApplicationState } from 'src/store'; import { TimezoneForm } from './TimezoneForm'; +import { RESTRICTED_FIELD_TOOLTIP } from 'src/features/Account/constants'; export const DisplaySettings = () => { const theme = useTheme(); @@ -65,9 +66,6 @@ export const DisplaySettings = () => { > ); - const restrictedProxyUserTooltip = - 'This account type cannot update this field.'; - return ( { profile?.restricted ? 'Restricted users cannot update their username. Please contact an account administrator.' : isProxyUser - ? restrictedProxyUserTooltip + ? RESTRICTED_FIELD_TOOLTIP : undefined } disabled={profile?.restricted || isProxyUser} @@ -138,7 +136,7 @@ export const DisplaySettings = () => { key={emailResetToken} label="Email" submitForm={updateEmail} - tooltipText={isProxyUser ? restrictedProxyUserTooltip : undefined} + tooltipText={isProxyUser ? RESTRICTED_FIELD_TOOLTIP : undefined} trimmed type="email" /> diff --git a/packages/manager/src/features/Users/UserProfile.tsx b/packages/manager/src/features/Users/UserProfile.tsx index 3a81a5be023..94dea27e373 100644 --- a/packages/manager/src/features/Users/UserProfile.tsx +++ b/packages/manager/src/features/Users/UserProfile.tsx @@ -9,13 +9,14 @@ import { CircleProgress } from 'src/components/CircleProgress'; import { DocumentTitleSegment } from 'src/components/DocumentTitle'; import { Notice } from 'src/components/Notice/Notice'; import { TextField } from 'src/components/TextField'; -import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; +import { useAccountUser } from 'src/queries/accountUsers'; import { useProfile } from 'src/queries/profile'; import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor'; import { UserDeleteConfirmationDialog } from './UserDeleteConfirmationDialog'; import { StyledTitle, StyledWrapper } from './UserProfile.styles'; +import { RESTRICTED_FIELD_TOOLTIP } from '../Account/constants'; interface UserProfileProps { accountErrors?: APIError[]; @@ -59,12 +60,15 @@ export const UserProfile = (props: UserProfileProps) => { } = props; const { data: profile } = useProfile(); + const { data: currentUser } = useAccountUser(username); const [ deleteConfirmDialogOpen, setDeleteConfirmDialogOpen, ] = React.useState(false); + const isProxyUserProfile = currentUser?.user_type === 'proxy'; + const renderProfileSection = () => { const hasAccountErrorFor = getAPIErrorFor( { username: 'Username' }, @@ -97,7 +101,11 @@ export const UserProfile = (props: UserProfileProps) => { /> )} { /> )} { Delete User Delete - {profile?.username === originalUsername && ( - - )} Date: Tue, 20 Feb 2024 12:13:12 -0700 Subject: [PATCH 07/37] change: [M3-7598] - Update developer docs on components (#10198) * Update developer docs on components * Correct some punctuation and remove an old Storybook section on mdx --- docs/development-guide/02-component-structure.md | 6 +++++- docs/development-guide/04-component-library.md | 10 ++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/development-guide/02-component-structure.md b/docs/development-guide/02-component-structure.md index 55a0f57b14e..004e4ba0923 100644 --- a/docs/development-guide/02-component-structure.md +++ b/docs/development-guide/02-component-structure.md @@ -61,7 +61,9 @@ export const capitalize = (s: string) => { #### Composition -When building a large component, it is recommended to break it down and avoid writing several components within the same file. It improves readability and testability. Components should, in most cases, come with their own unit test, although they can be skipped if an e2e suite is covering the functionality. +When building a large component, it is recommended to break it down and avoid writing several components within the same file. It improves readability and testability. It is also best to avoid same-file render functions (e.g. `renderTableBody`), in favor of extracting the JSX into its own component. In addition to improved readability and testability, this practice makes components less brittle and more extensible. + +Components should, in most cases, come with their own unit test, although they can be skipped if an e2e suite is covering the functionality. Utilities should almost always feature a unit test. #### Styles @@ -85,6 +87,8 @@ export const interface MyComponentProps { const MyComponent = (props: MyComponentProps) { ... } ``` - When it comes to components located in the `src/features/` directory, you can use the name `Props` for their types or interfaces, unless exporting is necessary. In such cases, name the type or interface after the component name. +- Define props as required, rather than optional, as often as possible for data relying on API responses (which can be `undefined`). In the case of `undefined` props, error handling - such as early return statements - can be done in the HOC. This allows all child components to expect data, avoiding extra conditionals or convoluted logic. + #### Function Component Definition - Prefer function components over class components. diff --git a/docs/development-guide/04-component-library.md b/docs/development-guide/04-component-library.md index b66e19046eb..2be52331b2d 100644 --- a/docs/development-guide/04-component-library.md +++ b/docs/development-guide/04-component-library.md @@ -2,7 +2,7 @@ ## Material-UI -We use [Material-UI](https://mui.com/material-ui/getting-started/overview/) as the primary component library for Cloud Manager. The library contains many UI primitives like `` and `` as well as a layout system with the `` component. +We use [Material-UI](https://mui.com/material-ui/getting-started/overview/) as the primary component library for Cloud Manager. The library contains many UI primitives like `` and ``, as well as a layout system with the `` component. All MUI components have abstractions in the Cloud Manager codebase, meaning you will use relative imports to use them instead of importing from MUI directly: @@ -37,7 +37,7 @@ A color, font, svg icon, or other simple styling convention. ##### Element -A basic HTML element wrapped in a react component, or a small component that is not normally used on its own. +A basic HTML element wrapped in a React component, or a small component that is not normally used on its own. ##### Component @@ -45,10 +45,8 @@ A composition of Core Styles and Elements. Normally with some code that defines ##### Feature -A Composition of Core Styles, Elements, and Components that defines a verticle slice of functionality. An example of a Feature is the Payment Method Row it combines Components, Elements, and Core Styles like Buttons, Action Menus, Icons, Typography, etc. +A Composition of Core Styles, Elements, and Components that defines a vertical slice of functionality. An example of a Feature is the Payment Method Row; it combines Components, Elements, and Core Styles like Buttons, Action Menus, Icons, Typography, etc. #### Best Practices -Our stories are in the process of being updated to the latest Storybook 7.0 format. -We currently use MDX both for documentation and for defining stories in the same `.stories.mdx` file. However, Storybook has deprecated this functionality and they plan to remove it in a future version of Storybook. -As we begin to move away from the MDX format, please refer to Storybook's [documentation](https://storybook.js.org/docs/react/writing-docs/introduction) for how to write stories in the CSF format. +Please refer to Storybook's [documentation](https://storybook.js.org/docs/react/writing-docs/introduction) for how to write stories in the CSF format. From f5bd65fe43d9b06b2efbacde5b723d6cfa73cf9b Mon Sep 17 00:00:00 2001 From: Jaalah Ramos <125309814+jaalah-akamai@users.noreply.github.com> Date: Tue, 20 Feb 2024 17:01:34 -0500 Subject: [PATCH 08/37] refactor: [M3-7786] - Convert `isRestrictedGlobalGrantType` to Hook (#10203) Co-authored-by: Jaalah Ramos Co-authored-by: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> --- .../pr-10203-tech-stories-1708119742778.md | 5 ++ .../manager/src/features/Account/utils.ts | 40 +---------- .../NodeBalancers/NodeBalancerCreate.tsx | 13 ++-- .../NodeBalancersLanding.tsx | 14 +--- .../NodeBalancersLandingEmptyState.tsx | 13 +--- .../useRestrictedGlobalGrantCheck.test.ts | 69 +++++++++++++++++++ .../hooks/useRestrictedGlobalGrantCheck.ts | 31 +++++++++ 7 files changed, 117 insertions(+), 68 deletions(-) create mode 100644 packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md create mode 100644 packages/manager/src/hooks/useRestrictedGlobalGrantCheck.test.ts create mode 100644 packages/manager/src/hooks/useRestrictedGlobalGrantCheck.ts diff --git a/packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md b/packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md new file mode 100644 index 00000000000..9bde62beef8 --- /dev/null +++ b/packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Convert isRestrictedGlobalGrantType to Hook ([#10203](https://github.com/linode/manager/pull/10203)) diff --git a/packages/manager/src/features/Account/utils.ts b/packages/manager/src/features/Account/utils.ts index de9b38a4699..0d44ba94697 100644 --- a/packages/manager/src/features/Account/utils.ts +++ b/packages/manager/src/features/Account/utils.ts @@ -3,8 +3,6 @@ import { getStorage, setStorage } from 'src/utilities/storage'; import type { GlobalGrantTypes, GrantLevel, - Grants, - Profile, Token, UserType, } from '@linode/api-v4'; @@ -18,17 +16,12 @@ interface GetRestrictedResourceText { resourceType: GrantTypeMap; } -interface GrantsProfileSchema { - grants: Grants | undefined; - profile: Profile | undefined; -} - -interface AccountAccessGrant extends GrantsProfileSchema { +interface AccountAccessGrant { globalGrantType: 'account_access'; permittedGrantLevel: GrantLevel; } -interface NonAccountAccessGrant extends GrantsProfileSchema { +interface NonAccountAccessGrant { globalGrantType: Exclude; permittedGrantLevel?: GrantLevel; } @@ -67,35 +60,6 @@ export const getAccessRestrictedText = ( } to request the necessary permission.`; }; -/** - * Determine whether the user has restricted access to a specific resource. - * - * @example - * // If account access does not equal 'read_write', the user has restricted access. - * isRestrictedGlobalGrantType({ - * globalGrantType: 'account_access', - * permittedGrantLevel: 'read_write', - * grants, - * profile - * }); - * // Returns: true - */ -export const isRestrictedGlobalGrantType = ({ - globalGrantType, - grants, - permittedGrantLevel, - profile, -}: RestrictedGlobalGrantType): boolean => { - if (globalGrantType !== 'account_access') { - return Boolean(profile?.restricted) && !grants?.global[globalGrantType]; - } - - return ( - Boolean(profile?.restricted) && - grants?.global[globalGrantType] !== permittedGrantLevel - ); -}; - // TODO: Parent/Child: FOR MSW ONLY, REMOVE WHEN API IS READY // ================================================================ // const mockExpiredTime = diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx index 5cf8dadbeea..07ca7deb82a 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx @@ -30,18 +30,16 @@ import { Tag, TagsInput } from 'src/components/TagsInput/TagsInput'; import { TextField } from 'src/components/TextField'; import { Typography } from 'src/components/Typography'; import { FIREWALL_GET_STARTED_LINK } from 'src/constants'; -import { - getRestrictedResourceText, - isRestrictedGlobalGrantType, -} from 'src/features/Account/utils'; +import { getRestrictedResourceText } from 'src/features/Account/utils'; import { useFlags } from 'src/hooks/useFlags'; +import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { reportAgreementSigningError, useAccountAgreements, useMutateAccountAgreements, } from 'src/queries/accountAgreements'; import { useNodebalancerCreateMutation } from 'src/queries/nodebalancers'; -import { useGrants, useProfile } from 'src/queries/profile'; +import { useProfile } from 'src/queries/profile'; import { useRegionsQuery } from 'src/queries/regions'; import { sendCreateNodeBalancerEvent } from 'src/utilities/analytics'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; @@ -94,7 +92,6 @@ const defaultFieldsStates = { const NodeBalancerCreate = () => { const flags = useFlags(); const { data: agreements } = useAccountAgreements(); - const { data: grants } = useGrants(); const { data: profile } = useProfile(); const { data: regions } = useRegionsQuery(); @@ -130,10 +127,8 @@ const NodeBalancerCreate = () => { const theme = useTheme(); const matchesSmDown = useMediaQuery(theme.breakpoints.down('md')); - const isRestricted = isRestrictedGlobalGrantType({ + const isRestricted = useRestrictedGlobalGrantCheck({ globalGrantType: 'add_nodebalancers', - grants, - profile, }); const addNodeBalancer = () => { diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLanding.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLanding.tsx index 4ae72c1f46a..0626eca8bab 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLanding.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLanding.tsx @@ -14,14 +14,11 @@ import { TableHead } from 'src/components/TableHead'; import { TableRow } from 'src/components/TableRow'; import { TableSortCell } from 'src/components/TableSortCell/TableSortCell'; import { TransferDisplay } from 'src/components/TransferDisplay/TransferDisplay'; -import { - getRestrictedResourceText, - isRestrictedGlobalGrantType, -} from 'src/features/Account/utils'; +import { getRestrictedResourceText } from 'src/features/Account/utils'; import { useOrder } from 'src/hooks/useOrder'; import { usePagination } from 'src/hooks/usePagination'; +import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { useNodeBalancersQuery } from 'src/queries/nodebalancers'; -import { useGrants, useProfile } from 'src/queries/profile'; import { NodeBalancerDeleteDialog } from '../NodeBalancerDeleteDialog'; import { NodeBalancerTableRow } from './NodeBalancerTableRow'; @@ -39,13 +36,8 @@ export const NodeBalancersLanding = () => { const history = useHistory(); const pagination = usePagination(1, preferenceKey); - const { data: grants } = useGrants(); - const { data: profile } = useProfile(); - - const isRestricted = isRestrictedGlobalGrantType({ + const isRestricted = useRestrictedGlobalGrantCheck({ globalGrantType: 'add_nodebalancers', - grants, - profile, }); const { handleOrderChange, order, orderBy } = useOrder( diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLandingEmptyState.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLandingEmptyState.tsx index e839141075d..5b941b51098 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLandingEmptyState.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLandingEmptyState.tsx @@ -7,21 +7,14 @@ import { DocumentTitleSegment } from 'src/components/DocumentTitle'; import { Link } from 'src/components/Link'; import { Placeholder } from 'src/components/Placeholder/Placeholder'; import { Typography } from 'src/components/Typography'; -import { - getRestrictedResourceText, - isRestrictedGlobalGrantType, -} from 'src/features/Account/utils'; -import { useGrants, useProfile } from 'src/queries/profile'; +import { getRestrictedResourceText } from 'src/features/Account/utils'; +import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; export const NodeBalancerLandingEmptyState = () => { const history = useHistory(); - const { data: grants } = useGrants(); - const { data: profile } = useProfile(); - const isRestricted = isRestrictedGlobalGrantType({ + const isRestricted = useRestrictedGlobalGrantCheck({ globalGrantType: 'add_nodebalancers', - grants, - profile, }); return ( diff --git a/packages/manager/src/hooks/useRestrictedGlobalGrantCheck.test.ts b/packages/manager/src/hooks/useRestrictedGlobalGrantCheck.test.ts new file mode 100644 index 00000000000..b3ffd123797 --- /dev/null +++ b/packages/manager/src/hooks/useRestrictedGlobalGrantCheck.test.ts @@ -0,0 +1,69 @@ +import { renderHook } from '@testing-library/react'; + +import { useRestrictedGlobalGrantCheck } from './useRestrictedGlobalGrantCheck'; + +const queryMocks = vi.hoisted(() => ({ + useGrants: vi.fn().mockReturnValue({}), + useProfile: vi.fn().mockReturnValue({}), +})); + +vi.mock('src/queries/profile', async () => { + const actual = await vi.importActual('src/queries/profile'); + return { + ...actual, + useGrants: queryMocks.useGrants, + useProfile: queryMocks.useProfile, + }; +}); + +describe('useRestrictedGlobalGrantCheck', () => { + it('returns true for restricted access with non-permitted grant level', () => { + queryMocks.useGrants.mockReturnValue({ + data: { global: { account_access: 'read_only' } }, + }); + queryMocks.useProfile.mockReturnValue({ data: { restricted: true } }); + + const { result } = renderHook(() => + useRestrictedGlobalGrantCheck({ + globalGrantType: 'account_access', + permittedGrantLevel: 'read_write', + }) + ); + + expect(result.current).toBe(true); + }); + + it('returns false for unrestricted access with permitted grant level', () => { + queryMocks.useGrants.mockReturnValue({ + data: { global: { account_access: 'read_write' } }, + }); + queryMocks.useProfile.mockReturnValue({ data: { restricted: false } }); + + const { result } = renderHook(() => + useRestrictedGlobalGrantCheck({ + globalGrantType: 'account_access', + permittedGrantLevel: 'read_write', + }) + ); + + expect(result.current).toBe(false); + }); + + it('returns true for restricted access to non-account_access resource', () => { + queryMocks.useGrants.mockReturnValue({ + data: { global: { add_linodes: false } }, + }); + queryMocks.useProfile.mockReturnValue({ data: { restricted: true } }); + + const { result } = renderHook(() => + useRestrictedGlobalGrantCheck({ + globalGrantType: 'add_linodes', + permittedGrantLevel: 'read_write', // This param is ignored for non-account_access types + }) + ); + + expect(result.current).toBe(true); + }); + + // Add more tests as needed to cover different scenarios and edge cases +}); diff --git a/packages/manager/src/hooks/useRestrictedGlobalGrantCheck.ts b/packages/manager/src/hooks/useRestrictedGlobalGrantCheck.ts new file mode 100644 index 00000000000..56c6c6ee34d --- /dev/null +++ b/packages/manager/src/hooks/useRestrictedGlobalGrantCheck.ts @@ -0,0 +1,31 @@ +import { useGrants, useProfile } from 'src/queries/profile'; + +import type { RestrictedGlobalGrantType } from 'src/features/Account/utils'; + +/** + * Determine whether the user has restricted access to a specific resource. + * + * @example + * // If account access does not equal 'read_write', the user has restricted access. + * useRestrictedGlobalGrantCheck({ + * globalGrantType: 'account_access', + * permittedGrantLevel: 'read_write', + * }); + * // Returns: true + */ +export const useRestrictedGlobalGrantCheck = ({ + globalGrantType, + permittedGrantLevel, +}: RestrictedGlobalGrantType): boolean => { + const { data: grants } = useGrants(); + const { data: profile } = useProfile(); + + if (globalGrantType !== 'account_access') { + return Boolean(profile?.restricted) && !grants?.global[globalGrantType]; + } + + return ( + Boolean(profile?.restricted) && + grants?.global[globalGrantType] !== permittedGrantLevel + ); +}; From a4bbe2a8dd5ea9e97c91031b23fc76b221137507 Mon Sep 17 00:00:00 2001 From: Jaalah Ramos <125309814+jaalah-akamai@users.noreply.github.com> Date: Tue, 20 Feb 2024 17:06:24 -0500 Subject: [PATCH 09/37] feat: [M3-7687] - Refactor & Improve `LinodeActionMenu` Restricted User Experience (#10199) Co-authored-by: Jaalah Ramos Co-authored-by: Hussain Khalil <122488130+hkhalil-akamai@users.noreply.github.com> --- .../pr-10199-tech-stories-1708028973425.md | 5 + .../EntityHeader/EntityHeader.stories.tsx | 2 +- .../manager/src/features/Account/utils.ts | 24 +- .../Linodes/LinodeEntityDetailHeader.tsx | 2 +- .../TabbedContent/FromLinodeContent.tsx | 2 +- .../LinodesLanding/LinodeActionMenu.tsx | 221 ----------------- .../LinodeActionMenu.test.tsx | 7 +- .../LinodeActionMenu/LinodeActionMenu.tsx | 225 ++++++++++++++++++ .../LinodeActionMenu/LinodeActionMenuUtils.ts | 31 +++ .../LinodesLanding/LinodeRow/LinodeRow.tsx | 2 +- 10 files changed, 289 insertions(+), 232 deletions(-) create mode 100644 packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md delete mode 100644 packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.tsx rename packages/manager/src/features/Linodes/LinodesLanding/{ => LinodeActionMenu}/LinodeActionMenu.test.tsx (96%) create mode 100644 packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.tsx create mode 100644 packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenuUtils.ts diff --git a/packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md b/packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md new file mode 100644 index 00000000000..4dab61e254f --- /dev/null +++ b/packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Refactor & Improve LinodeActionMenu Restricted User Experience ([#10199](https://github.com/linode/manager/pull/10199)) diff --git a/packages/manager/src/components/EntityHeader/EntityHeader.stories.tsx b/packages/manager/src/components/EntityHeader/EntityHeader.stories.tsx index bb6c64377a1..795daa1010f 100644 --- a/packages/manager/src/components/EntityHeader/EntityHeader.stories.tsx +++ b/packages/manager/src/components/EntityHeader/EntityHeader.stories.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { Box } from 'src/components/Box'; import { EntityHeader } from 'src/components/EntityHeader/EntityHeader'; import { Hidden } from 'src/components/Hidden'; -import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu'; +import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu'; import { Button } from '../Button/Button'; import { Link } from '../Link'; diff --git a/packages/manager/src/features/Account/utils.ts b/packages/manager/src/features/Account/utils.ts index 0d44ba94697..f46800c5937 100644 --- a/packages/manager/src/features/Account/utils.ts +++ b/packages/manager/src/features/Account/utils.ts @@ -8,10 +8,22 @@ import type { } from '@linode/api-v4'; import type { GrantTypeMap } from 'src/features/Account/types'; -type ActionType = 'create' | 'delete' | 'edit' | 'view'; +export type ActionType = + | 'clone' + | 'create' + | 'delete' + | 'edit' + | 'migrate' + | 'modify' + | 'reboot' + | 'rebuild' + | 'rescue' + | 'resize' + | 'view'; interface GetRestrictedResourceText { action?: ActionType; + includeContactMessage?: boolean; isSingular?: boolean; resourceType: GrantTypeMap; } @@ -36,6 +48,7 @@ export type RestrictedGlobalGrantType = */ export const getRestrictedResourceText = ({ action = 'edit', + includeContactMessage = true, isSingular = true, resourceType, }: GetRestrictedResourceText): string => { @@ -43,7 +56,14 @@ export const getRestrictedResourceText = ({ ? 'this ' + resourceType.replace(/s$/, '') : resourceType; - return `You don't have permissions to ${action} ${resource}. Please contact your account administrator to request the necessary permissions.`; + let message = `You don't have permissions to ${action} ${resource}.`; + + if (includeContactMessage) { + message += + ' Please contact your account administrator to request the necessary permissions.'; + } + + return message; }; /** diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx index 8d78a6f9ff5..f940664b6ef 100644 --- a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx +++ b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx @@ -10,7 +10,7 @@ import { EntityHeader } from 'src/components/EntityHeader/EntityHeader'; import { Hidden } from 'src/components/Hidden'; import { TooltipIcon } from 'src/components/TooltipIcon'; import { TypographyProps } from 'src/components/Typography'; -import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu'; +import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu'; import { ProgressDisplay } from 'src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow'; import { lishLaunch } from 'src/features/Lish/lishUtils'; import { queryKey as linodesQueryKey } from 'src/queries/linodes/linodes'; diff --git a/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx b/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx index 7a027f86f48..a62df47226d 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/TabbedContent/FromLinodeContent.tsx @@ -4,7 +4,7 @@ import { useHistory } from 'react-router-dom'; import VolumeIcon from 'src/assets/icons/entityIcons/volume.svg'; import { Paper } from 'src/components/Paper'; import { Placeholder } from 'src/components/Placeholder/Placeholder'; -import { buildQueryStringForLinodeClone } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu'; +import { buildQueryStringForLinodeClone } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenuUtils'; import { useFlags } from 'src/hooks/useFlags'; import { extendType } from 'src/utilities/extendType'; import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor'; diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.tsx deleted file mode 100644 index e0b06aa7065..00000000000 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.tsx +++ /dev/null @@ -1,221 +0,0 @@ -import { LinodeBackups, LinodeType } from '@linode/api-v4/lib/linodes'; -import { Region } from '@linode/api-v4/lib/regions'; -import { Theme, useTheme } from '@mui/material/styles'; -import useMediaQuery from '@mui/material/useMediaQuery'; -import * as React from 'react'; -import { useHistory } from 'react-router-dom'; - -import { Action, ActionMenu } from 'src/components/ActionMenu/ActionMenu'; -import { lishLaunch } from 'src/features/Lish/lishUtils'; -import { useGrants } from 'src/queries/profile'; -import { useRegionsQuery } from 'src/queries/regions'; -import { useSpecificTypes } from 'src/queries/types'; -import { - sendLinodeActionEvent, - sendLinodeActionMenuItemEvent, - sendMigrationNavigationEvent, -} from 'src/utilities/analytics'; -import { ExtendedType, extendType } from 'src/utilities/extendType'; -import { getPermissionsForLinode } from 'src/utilities/linodes'; - -import { LinodeHandlers } from './LinodesLanding'; - -export interface LinodeActionMenuProps extends LinodeHandlers { - inListView?: boolean; - linodeBackups: LinodeBackups; - linodeId: number; - linodeLabel: string; - linodeRegion: string; - linodeStatus: string; - linodeType?: LinodeType; -} - -// When we clone a Linode from the action menu, we pass in several query string -// params so everything is selected for us when we get to the Create flow. -export const buildQueryStringForLinodeClone = ( - linodeId: number, - linodeRegion: string, - linodeType: null | string, - types: ExtendedType[] | null | undefined, - regions: Region[] -): string => { - const linodeRegionId = - regions.find((region) => region.label === linodeRegion)?.id ?? ''; - const params: Record = { - linodeID: String(linodeId), - regionID: linodeRegionId, - type: 'Clone Linode', - }; - - // If the type of this Linode is a valid (current) type, use it in the QS - if (types && types.some((typeEntity) => typeEntity.id === linodeType)) { - params.typeID = linodeType!; - } - - // If the region of this Linode is a valid region, use it in the QS - if (regions && regions.some((region) => region.id === linodeRegion)) { - params.regionID = linodeRegion; - } - - return new URLSearchParams(params).toString(); -}; - -export const LinodeActionMenu = (props: LinodeActionMenuProps) => { - const { - inListView, - linodeId, - linodeRegion, - linodeStatus, - linodeType, - } = props; - - const theme = useTheme(); - const matchesSmDown = useMediaQuery(theme.breakpoints.down('md')); - - const typesQuery = useSpecificTypes(linodeType?.id ? [linodeType.id] : []); - const type = typesQuery[0]?.data; - const extendedType = type ? extendType(type) : undefined; - const history = useHistory(); - const regions = useRegionsQuery().data ?? []; - const isBareMetalInstance = linodeType?.class === 'metal'; - - const { data: grants } = useGrants(); - - const readOnly = getPermissionsForLinode(grants, linodeId) === 'read_only'; - - const handlePowerAction = () => { - const action = linodeStatus === 'running' ? 'Power Off' : 'Power On'; - sendLinodeActionMenuItemEvent(`${action} Linode`); - props.onOpenPowerDialog(action); - }; - - const hasHostMaintenance = linodeStatus === 'stopped'; - const maintenanceProps = { - disabled: hasHostMaintenance, - tooltip: hasHostMaintenance - ? 'This action is unavailable while your Linode is undergoing host maintenance.' - : undefined, - }; - - const noPermissionTooltipText = - "You don't have permission to modify this Linode."; - - const readOnlyProps = readOnly - ? { - disabled: true, - tooltip: noPermissionTooltipText, - } - : {}; - - const actions = [ - inListView || matchesSmDown - ? { - disabled: !['offline', 'running'].includes(linodeStatus) || readOnly, - onClick: handlePowerAction, - title: linodeStatus === 'running' ? 'Power Off' : 'Power On', - tooltip: readOnly ? noPermissionTooltipText : undefined, - } - : null, - inListView || matchesSmDown - ? { - disabled: linodeStatus !== 'running' || readOnly, - onClick: () => { - sendLinodeActionMenuItemEvent('Reboot Linode'); - props.onOpenPowerDialog('Reboot'); - }, - title: 'Reboot', - tooltip: readOnly ? noPermissionTooltipText : undefined, - ...readOnlyProps, - } - : null, - inListView || matchesSmDown - ? { - onClick: () => { - sendLinodeActionMenuItemEvent('Launch Console'); - lishLaunch(linodeId); - }, - title: 'Launch LISH Console', - ...readOnlyProps, - } - : null, - isBareMetalInstance - ? null - : { - onClick: () => { - sendLinodeActionMenuItemEvent('Clone'); - history.push({ - pathname: '/linodes/create', - search: buildQueryStringForLinodeClone( - linodeId, - linodeRegion, - linodeType?.id ?? null, - extendedType ? [extendedType] : null, - regions - ), - }); - }, - title: 'Clone', - ...maintenanceProps, - ...readOnlyProps, - }, - isBareMetalInstance - ? null - : { - onClick: () => { - props.onOpenResizeDialog(); - }, - title: 'Resize', - ...maintenanceProps, - ...readOnlyProps, - }, - { - onClick: () => { - sendLinodeActionMenuItemEvent('Navigate to Rebuild Page'); - props.onOpenRebuildDialog(); - }, - title: 'Rebuild', - ...maintenanceProps, - ...readOnlyProps, - }, - { - onClick: () => { - sendLinodeActionMenuItemEvent('Navigate to Rescue Page'); - props.onOpenRescueDialog(); - }, - title: 'Rescue', - ...maintenanceProps, - ...readOnlyProps, - }, - isBareMetalInstance - ? null - : { - onClick: () => { - sendMigrationNavigationEvent('/linodes'); - sendLinodeActionMenuItemEvent('Migrate'); - props.onOpenMigrateDialog(); - }, - title: 'Migrate', - ...readOnlyProps, - }, - { - onClick: () => { - sendLinodeActionMenuItemEvent('Delete Linode'); - props.onOpenDeleteDialog(); - }, - title: 'Delete', - ...readOnlyProps, - }, - ].filter(Boolean) as ExtendedAction[]; - - return ( - - ); -}; - -interface ExtendedAction extends Action { - className?: string; -} diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.test.tsx similarity index 96% rename from packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx rename to packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.test.tsx index 62fde8194bc..cd22327fcf6 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.test.tsx @@ -7,11 +7,8 @@ import { linodeBackupsFactory } from 'src/factories/linodes'; import { regionFactory } from 'src/factories/regions'; import { renderWithTheme } from 'src/utilities/testHelpers'; -import { - LinodeActionMenu, - LinodeActionMenuProps, - buildQueryStringForLinodeClone, -} from './LinodeActionMenu'; +import { LinodeActionMenu, LinodeActionMenuProps } from './LinodeActionMenu'; +import { buildQueryStringForLinodeClone } from './LinodeActionMenuUtils'; const props: LinodeActionMenuProps = { inListView: true, diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.tsx new file mode 100644 index 00000000000..fe0ef8a3a85 --- /dev/null +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.tsx @@ -0,0 +1,225 @@ +import { LinodeBackups, LinodeType } from '@linode/api-v4/lib/linodes'; +import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import * as React from 'react'; +import { useHistory } from 'react-router-dom'; + +import { ActionMenu } from 'src/components/ActionMenu/ActionMenu'; +import { + ActionType, + getRestrictedResourceText, +} from 'src/features/Account/utils'; +import { lishLaunch } from 'src/features/Lish/lishUtils'; +import { useIsResourceRestricted } from 'src/hooks/useIsResourceRestricted'; +import { useRegionsQuery } from 'src/queries/regions'; +import { useSpecificTypes } from 'src/queries/types'; +import { + sendLinodeActionEvent, + sendLinodeActionMenuItemEvent, + sendMigrationNavigationEvent, +} from 'src/utilities/analytics'; +import { extendType } from 'src/utilities/extendType'; + +import { LinodeHandlers } from '../LinodesLanding'; +import { buildQueryStringForLinodeClone } from './LinodeActionMenuUtils'; + +export interface LinodeActionMenuProps extends LinodeHandlers { + inListView?: boolean; + linodeBackups: LinodeBackups; + linodeId: number; + linodeLabel: string; + linodeRegion: string; + linodeStatus: string; + linodeType?: LinodeType; +} + +interface ActionConfig { + condition: boolean; + disabled: boolean; + isReadOnly: boolean; + onClick: () => void; + title: string; + tooltipAction: ActionType; + tooltipText?: string; +} + +export const LinodeActionMenu = (props: LinodeActionMenuProps) => { + const { + inListView, + linodeId, + linodeRegion, + linodeStatus, + linodeType, + } = props; + const typesQuery = useSpecificTypes(linodeType?.id ? [linodeType.id] : []); + const type = typesQuery[0]?.data; + const extendedType = type ? extendType(type) : undefined; + const history = useHistory(); + const regions = useRegionsQuery().data ?? []; + const isBareMetalInstance = linodeType?.class === 'metal'; + const hasHostMaintenance = linodeStatus === 'stopped'; + const theme = useTheme(); + const matchesSmDown = useMediaQuery(theme.breakpoints.down('md')); + const isVisible = inListView || matchesSmDown; + + const isLinodeReadOnly = useIsResourceRestricted({ + grantLevel: 'read_only', + grantType: 'linode', + id: linodeId, + }); + + const maintenanceTooltipText = + hasHostMaintenance && !isLinodeReadOnly + ? 'This action is unavailable while your Linode is undergoing host maintenance.' + : undefined; + + const handlePowerAction = () => { + const action = linodeStatus === 'running' ? 'Power Off' : 'Power On'; + sendLinodeActionMenuItemEvent(`${action} Linode`); + props.onOpenPowerDialog(action); + }; + + const actionConfigs: ActionConfig[] = [ + { + condition: isVisible, + disabled: + !['offline', 'running'].includes(linodeStatus) || isLinodeReadOnly, + isReadOnly: isLinodeReadOnly, + onClick: handlePowerAction, + title: linodeStatus === 'running' ? 'Power Off' : 'Power On', + tooltipAction: 'modify', + }, + { + condition: isVisible, + disabled: linodeStatus !== 'running' || isLinodeReadOnly, + isReadOnly: isLinodeReadOnly, + onClick: () => { + sendLinodeActionMenuItemEvent('Reboot Linode'); + props.onOpenPowerDialog('Reboot'); + }, + title: 'Reboot', + tooltipAction: 'reboot', + tooltipText: + !isLinodeReadOnly && linodeStatus !== 'running' + ? 'This action is unavailable while your Linode is offline.' + : undefined, + }, + { + condition: isVisible, + disabled: isLinodeReadOnly, + isReadOnly: isLinodeReadOnly, + onClick: () => { + sendLinodeActionMenuItemEvent('Launch Console'); + lishLaunch(linodeId); + }, + title: 'Launch LISH Console', + tooltipAction: 'edit', + }, + { + condition: !isBareMetalInstance, + disabled: isLinodeReadOnly || hasHostMaintenance, + isReadOnly: isLinodeReadOnly, + onClick: () => { + sendLinodeActionMenuItemEvent('Clone'); + history.push({ + pathname: '/linodes/create', + search: buildQueryStringForLinodeClone( + linodeId, + linodeRegion, + linodeType?.id ?? null, + extendedType ? [extendedType] : null, + regions + ), + }); + }, + title: 'Clone', + tooltipAction: 'clone', + tooltipText: maintenanceTooltipText, + }, + { + condition: !isBareMetalInstance, + disabled: isLinodeReadOnly || hasHostMaintenance, + isReadOnly: isLinodeReadOnly, + onClick: props.onOpenResizeDialog, + title: 'Resize', + tooltipAction: 'resize', + tooltipText: maintenanceTooltipText, + }, + { + condition: true, + disabled: isLinodeReadOnly || hasHostMaintenance, + isReadOnly: isLinodeReadOnly, + onClick: props.onOpenRebuildDialog, + title: 'Rebuild', + tooltipAction: 'rebuild', + tooltipText: maintenanceTooltipText, + }, + { + condition: true, + disabled: isLinodeReadOnly || hasHostMaintenance, + isReadOnly: isLinodeReadOnly, + onClick: props.onOpenRescueDialog, + title: 'Rescue', + tooltipAction: 'rescue', + tooltipText: maintenanceTooltipText, + }, + { + condition: !isBareMetalInstance, + disabled: isLinodeReadOnly || hasHostMaintenance, + isReadOnly: isLinodeReadOnly, + onClick: () => { + sendMigrationNavigationEvent('/linodes'); + sendLinodeActionMenuItemEvent('Migrate'); + props.onOpenMigrateDialog(); + }, + title: 'Migrate', + tooltipAction: 'migrate', + tooltipText: maintenanceTooltipText, + }, + { + condition: true, + disabled: isLinodeReadOnly || hasHostMaintenance, + isReadOnly: isLinodeReadOnly, + onClick: () => { + sendLinodeActionMenuItemEvent('Delete Linode'); + props.onOpenDeleteDialog(); + }, + title: 'Delete', + tooltipAction: 'delete', + tooltipText: maintenanceTooltipText, + }, + ]; + + const actions = createActionMenuItems(actionConfigs, isLinodeReadOnly); + + return ( + + ); +}; + +export const createActionMenuItems = ( + configs: ActionConfig[], + isReadOnly: boolean +) => + configs + .filter(({ condition }) => condition) + .map(({ disabled, onClick, title, tooltipAction, tooltipText }) => { + const defaultTooltipText = isReadOnly + ? getRestrictedResourceText({ + action: tooltipAction, + includeContactMessage: false, + resourceType: 'Linodes', + }) + : undefined; + + return { + disabled: disabled || isReadOnly, + onClick, + title, + tooltip: tooltipText || defaultTooltipText, + }; + }); diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenuUtils.ts b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenuUtils.ts new file mode 100644 index 00000000000..7bec463fe95 --- /dev/null +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenuUtils.ts @@ -0,0 +1,31 @@ +import { Region } from '@linode/api-v4/lib'; + +import { ExtendedType } from 'src/utilities/extendType'; + +export const buildQueryStringForLinodeClone = ( + linodeId: number, + linodeRegion: string, + linodeType: null | string, + types: ExtendedType[] | null | undefined, + regions: Region[] +): string => { + const linodeRegionId = + regions.find((region) => region.label === linodeRegion)?.id ?? ''; + const params: Record = { + linodeID: String(linodeId), + regionID: linodeRegionId, + type: 'Clone Linode', + }; + + // If the type of this Linode is a valid (current) type, use it in the QS + if (types && types.some((typeEntity) => typeEntity.id === linodeType)) { + params.typeID = linodeType!; + } + + // If the region of this Linode is a valid region, use it in the QS + if (regions && regions.some((region) => region.id === linodeRegion)) { + params.regionID = linodeRegion; + } + + return new URLSearchParams(params).toString(); +}; diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.tsx index d89f5ea0ffd..2a670895ffa 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.tsx @@ -11,6 +11,7 @@ import { TableRow } from 'src/components/TableRow'; import { Tooltip } from 'src/components/Tooltip'; import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; +import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu'; import { getProgressOrDefault, linodeInTransition, @@ -24,7 +25,6 @@ import { formatStorageUnits } from 'src/utilities/formatStorageUnits'; import { LinodeWithMaintenance } from 'src/utilities/linodes'; import { IPAddress } from '../IPAddress'; -import { LinodeActionMenu } from '../LinodeActionMenu'; import { LinodeHandlers } from '../LinodesLanding'; import { RegionIndicator } from '../RegionIndicator'; import { getLinodeIconStatus, parseMaintenanceStartTime } from '../utils'; From 65a84e94409169f206c38e1bf75df9610abc78bf Mon Sep 17 00:00:00 2001 From: carrillo-erik <119514965+carrillo-erik@users.noreply.github.com> Date: Tue, 20 Feb 2024 15:51:24 -0800 Subject: [PATCH 10/37] upcoming: [M3-7615] - Add placement group to payload (#10195) * Add placement group to payload * Add changes from PR feedback * Add changeset * Update placement group payload per API spec * Add feature flag check for pg payload * Fix pg labels * Remove redundant tooltip icon import and fix styling * Add changeset --- ...r-10195-upcoming-features-1708464732978.md | 5 +++ packages/api-v4/src/linodes/types.ts | 10 +++++- ...r-10195-upcoming-features-1708099058499.md | 5 +++ .../components/Autocomplete/Autocomplete.tsx | 1 + .../DetailsPanel.test.tsx} | 8 ++--- .../DetailsPanel.tsx} | 26 +++++++-------- .../PlacementGroupsSelect.tsx | 10 ++++-- .../Linodes/LinodesCreate/LinodeCreate.tsx | 21 +++++++++--- .../LinodesCreate/LinodeCreateContainer.tsx | 33 ++++++++++++++++++- packages/validation/src/linodes.schema.ts | 6 ++++ 10 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md create mode 100644 packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md rename packages/manager/src/components/{LabelAndTagsPanel/LabelAndTagsPanel.test.tsx => DetailsPanel/DetailsPanel.test.tsx} (93%) rename packages/manager/src/components/{LabelAndTagsPanel/LabelAndTagsPanel.tsx => DetailsPanel/DetailsPanel.tsx} (85%) diff --git a/packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md b/packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md new file mode 100644 index 00000000000..b9ed63dfbd0 --- /dev/null +++ b/packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md @@ -0,0 +1,5 @@ +--- +"@linode/api-v4": Upcoming Features +--- + +Accept placement group in Linode create payload ([#10195](https://github.com/linode/manager/pull/10195)) diff --git a/packages/api-v4/src/linodes/types.ts b/packages/api-v4/src/linodes/types.ts index 73634125016..085dc6f722d 100644 --- a/packages/api-v4/src/linodes/types.ts +++ b/packages/api-v4/src/linodes/types.ts @@ -24,8 +24,10 @@ export interface Linode { ipv4: string[]; ipv6: string | null; label: string; + // While the API returns an array of PlacementGroup objects for future proofing, + // we only support one PlacementGroup per Linode at this time, hence the tuple. placement_groups: - | [Pick] // While the API returns an array of PlacementGroup objects for future proofing, we only support one PlacementGroup per Linode at this time, hence the tuple. + | [Pick] | []; type: string | null; status: LinodeStatus; @@ -338,6 +340,11 @@ export interface UserData { user_data: string | null; } +export interface CreateLinodePlacementGroupPayload { + id?: number | null; + compliant_only?: boolean | null; +} + export interface CreateLinodeRequest { type?: string; region?: string; @@ -357,6 +364,7 @@ export interface CreateLinodeRequest { interfaces?: InterfacePayload[]; metadata?: UserData; firewall_id?: number; + placement_group?: CreateLinodePlacementGroupPayload; } export type RescueRequestObject = Pick< diff --git a/packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md b/packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md new file mode 100644 index 00000000000..1e32acd1e2d --- /dev/null +++ b/packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Add placement group details to Create Linode payload ([#10195](https://github.com/linode/manager/pull/10195)) diff --git a/packages/manager/src/components/Autocomplete/Autocomplete.tsx b/packages/manager/src/components/Autocomplete/Autocomplete.tsx index 3aa494f3c23..52a27160840 100644 --- a/packages/manager/src/components/Autocomplete/Autocomplete.tsx +++ b/packages/manager/src/components/Autocomplete/Autocomplete.tsx @@ -108,6 +108,7 @@ export const Autocomplete = < noMarginTop={noMarginTop} placeholder={placeholder || 'Select an option'} required={textFieldProps?.InputProps?.required} + tooltipText={textFieldProps?.tooltipText} {...params} {...textFieldProps} InputProps={{ diff --git a/packages/manager/src/components/LabelAndTagsPanel/LabelAndTagsPanel.test.tsx b/packages/manager/src/components/DetailsPanel/DetailsPanel.test.tsx similarity index 93% rename from packages/manager/src/components/LabelAndTagsPanel/LabelAndTagsPanel.test.tsx rename to packages/manager/src/components/DetailsPanel/DetailsPanel.test.tsx index 695a00a5b6c..3f688ae8df7 100644 --- a/packages/manager/src/components/LabelAndTagsPanel/LabelAndTagsPanel.test.tsx +++ b/packages/manager/src/components/DetailsPanel/DetailsPanel.test.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { renderWithTheme } from 'src/utilities/testHelpers'; -import { LabelAndTagsPanel } from './LabelAndTagsPanel'; +import { DetailsPanel } from './DetailsPanel'; const onLabelChange = vi.fn(); const onTagsChange = vi.fn(); @@ -12,7 +12,7 @@ const TAG_LABEL = 'Custom Label'; describe('Tags list', () => { it('should render tags input if tagsInputProps are specified', () => { const { getByLabelText, queryByText } = renderWithTheme( - { it('should render error text if errorText or tagError is specified', () => { const { getByText } = renderWithTheme( - { it('should NOT render tags input if tagsInputProps are NOT specified', () => { const { queryByLabelText } = renderWithTheme( - { +export const DetailsPanel = (props: DetailsPanelProps) => { const theme = useTheme(); const flags = useFlags(); const showPlacementGroups = Boolean(flags.vmPlacement); @@ -51,7 +50,15 @@ export const LabelAndTagsPanel = (props: LabelAndTagsProps) => { }} data-qa-label-header > + ({ marginBottom: theme.spacing(2) })} + variant="h2" + > + Details + + {error && } + { data-qa-label-input noMarginTop /> + {tagsInputProps && } + {showPlacementGroups && ( <> {!placementGroupsSelectProps?.selectedRegionId && ( @@ -85,16 +94,7 @@ export const LabelAndTagsPanel = (props: LabelAndTagsProps) => { }, width: '400px', }} - /> - )} diff --git a/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupsSelect.tsx b/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupsSelect.tsx index a3cca9d5582..7a493367658 100644 --- a/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupsSelect.tsx +++ b/packages/manager/src/components/PlacementGroupsSelect/PlacementGroupsSelect.tsx @@ -1,9 +1,10 @@ -import { PlacementGroup } from '@linode/api-v4'; +import { AFFINITY_TYPES, PlacementGroup } from '@linode/api-v4'; import { APIError } from '@linode/api-v4/lib/types'; import { SxProps } from '@mui/system'; import * as React from 'react'; import { Autocomplete } from 'src/components/Autocomplete/Autocomplete'; +import { TextFieldProps } from 'src/components/TextField'; import { useUnpaginatedPlacementGroupsQuery } from 'src/queries/placementGroups'; export interface PlacementGroupsSelectProps { @@ -23,6 +24,7 @@ export interface PlacementGroupsSelectProps { renderOptionLabel?: (placementGroups: PlacementGroup) => string; selectedRegionId?: string; sx?: SxProps; + textFieldProps?: Partial; } export const PlacementGroupsSelect = (props: PlacementGroupsSelectProps) => { @@ -40,6 +42,7 @@ export const PlacementGroupsSelect = (props: PlacementGroupsSelectProps) => { renderOptionLabel, selectedRegionId, sx, + ...textFieldProps } = props; const { @@ -61,7 +64,9 @@ export const PlacementGroupsSelect = (props: PlacementGroupsSelectProps) => { getOptionLabel={(placementGroupsOptions: PlacementGroup) => renderOptionLabel ? renderOptionLabel(placementGroupsOptions) - : `${placementGroupsOptions.label} (${placementGroupsOptions.affinity_type})` + : `${placementGroupsOptions.label} (${ + AFFINITY_TYPES[placementGroupsOptions?.affinity_type] + })` } noOptionsText={ noOptionsMessage ?? getDefaultNoOptionsMessage(error, isLoading) @@ -93,6 +98,7 @@ export const PlacementGroupsSelect = (props: PlacementGroupsSelectProps) => { options={placementGroupsOptions ?? []} placeholder="Select a Placement Group" sx={sx} + {...textFieldProps} /> ); }; diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx index 63f2f259c6c..5ce9b345831 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx @@ -1,5 +1,6 @@ import { PlacementGroup } from '@linode/api-v4'; import { + CreateLinodePlacementGroupPayload, InterfacePayload, PriceObject, restoreBackup, @@ -17,9 +18,9 @@ import { AccessPanel } from 'src/components/AccessPanel/AccessPanel'; import { Box } from 'src/components/Box'; import { CheckoutSummary } from 'src/components/CheckoutSummary/CheckoutSummary'; import { CircleProgress } from 'src/components/CircleProgress'; +import { DetailsPanel } from 'src/components/DetailsPanel/DetailsPanel'; import { DocsLink } from 'src/components/DocsLink/DocsLink'; import { ErrorState } from 'src/components/ErrorState/ErrorState'; -import { LabelAndTagsPanel } from 'src/components/LabelAndTagsPanel/LabelAndTagsPanel'; import { Link } from 'src/components/Link'; import { Notice } from 'src/components/Notice/Notice'; import { SelectRegionPanel } from 'src/components/SelectRegionPanel/SelectRegionPanel'; @@ -39,11 +40,11 @@ import { RegionsProps } from 'src/containers/regions.container'; import { WithTypesProps } from 'src/containers/types.container'; import { WithLinodesProps } from 'src/containers/withLinodes.container'; import { EUAgreementCheckbox } from 'src/features/Account/Agreements/EUAgreementCheckbox'; -import { regionSupportsMetadata } from 'src/features/Linodes/LinodesCreate/utilities'; import { getMonthlyAndHourlyNodePricing, utoa, } from 'src/features/Linodes/LinodesCreate/utilities'; +import { regionSupportsMetadata } from 'src/features/Linodes/LinodesCreate/utilities'; import { SMTPRestrictionText } from 'src/features/Linodes/SMTPRestrictionText'; import { hasPlacementGroupReachedCapacity } from 'src/features/PlacementGroups/utils'; import { @@ -164,6 +165,7 @@ const errorMap = [ 'interfaces[1].ipam_address', 'interfaces[0].subnet_id', 'ipv4.vpc', + 'placement_group', ]; type InnerProps = WithTypesRegionsAndImages & @@ -633,7 +635,7 @@ export class LinodeCreate extends React.PureComponent< showTransfer types={this.filterTypes()} /> - {/* Hide for backups and clone */} @@ -833,6 +836,11 @@ export class LinodeCreate extends React.PureComponent< 'VPCs' ); + const placement_group_payload: CreateLinodePlacementGroupPayload = { + compliant_only: true, + id: this.props.placementGroupSelection?.id, + }; + // eslint-disable-next-line sonarjs/no-unused-collection const interfaces: InterfacePayload[] = []; @@ -845,13 +853,16 @@ export class LinodeCreate extends React.PureComponent< this.props.firewallId !== -1 ? this.props.firewallId : undefined, image: this.props.selectedImageID, label: this.props.label, + placement_group: this.props.flags.vmPlacement + ? placement_group_payload + : undefined, private_ip: this.props.privateIPEnabled, region: this.props.selectedRegionID, root_pass: this.props.password, stackscript_data: this.props.selectedUDFs, + // StackScripts stackscript_id: this.props.selectedStackScriptID, - tags: this.props.tags ? this.props.tags.map((eachTag) => eachTag.label) : [], diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx index 317d2d39b56..8310c7c9d07 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx @@ -52,6 +52,7 @@ import { import withAgreements, { AgreementsProps, } from 'src/features/Account/Agreements/withAgreements'; +import { hasPlacementGroupReachedCapacity } from 'src/features/PlacementGroups/utils'; import { accountAgreementsQueryKey, reportAgreementSigningError, @@ -66,11 +67,11 @@ import { } from 'src/utilities/analytics'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; import { ExtendedType, extendType } from 'src/utilities/extendType'; +import { isEURegion } from 'src/utilities/formatRegion'; import { getGDPRDetails, getSelectedRegionGroup, } from 'src/utilities/formatRegion'; -import { isEURegion } from 'src/utilities/formatRegion'; import { ExtendedIP } from 'src/utilities/ipUtils'; import { UNKNOWN_PRICE } from 'src/utilities/pricing/constants'; import { getLinodeRegionPrice } from 'src/utilities/pricing/linodes'; @@ -749,6 +750,36 @@ class LinodeCreateContainer extends React.PureComponent { } } + if (payload.placement_group) { + const error = hasPlacementGroupReachedCapacity({ + placementGroup: this.state.placementGroupSelection!, + region: this.props.regionsData.find( + (r) => r.id === this.state.selectedRegionID + )!, + }); + if (error) { + this.setState( + { + errors: [ + { + field: 'placement_group', + reason: `${this.state.placementGroupSelection?.label} (${ + this.state.placementGroupSelection?.affinity_type === + 'affinity' + ? 'Affinity' + : 'Anti-affinity' + }) doesn't have any capacity for this Linode.`, + }, + ], + }, + () => { + scrollErrorIntoView(); + } + ); + return; + } + } + // Validation for VPC fields if ( this.state.selectedVPCId !== undefined && diff --git a/packages/validation/src/linodes.schema.ts b/packages/validation/src/linodes.schema.ts index 2c9948e9679..89666f99af4 100644 --- a/packages/validation/src/linodes.schema.ts +++ b/packages/validation/src/linodes.schema.ts @@ -260,6 +260,11 @@ const MetadataSchema = object({ user_data: string().notRequired().nullable(true), }); +const PlacementGroupPayloadSchema = object({ + id: number().notRequired().nullable(true), + compliant_only: boolean().notRequired().nullable(true), +}); + export const CreateLinodeSchema = object({ type: string().ensure().required('Plan is required.'), region: string().ensure().required('Region is required.'), @@ -294,6 +299,7 @@ export const CreateLinodeSchema = object({ interfaces: LinodeInterfacesSchema, metadata: MetadataSchema, firewall_id: number().notRequired(), + placement_group: PlacementGroupPayloadSchema, }); const alerts = object({ From b9819bb2125904ce758d9ffcff5feb706effd600 Mon Sep 17 00:00:00 2001 From: cpathipa <119517080+cpathipa@users.noreply.github.com> Date: Wed, 21 Feb 2024 11:22:23 -0600 Subject: [PATCH 11/37] upcoming: [M3-7743] - Handle errors gracefully when FF enabled without MSW (#10189) * upcoming: [M3-7743] - Handle errors gracefully when FF enabled without MSW * Added changeset: Handle errors gracefully when FF enabled without MSW. * Handle error scenarios when MSW is off for OBJ * Code cleanup * Update packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md Co-authored-by: Dajahi Wiley <114682940+dwiley-akamai@users.noreply.github.com> * PR - feedback @dwiley-akamai * Code cleanup * Revert "Code cleanup" This reverts commit 4ff4c1ced0fbbc9477e335de0f1dbcb986e86e06. * PR - feedback - @DevDW - Lift intermediary AccessKeyTableRows component. * PR - feedback - @bnussman - Return empty table cell when no data. --------- Co-authored-by: Dajahi Wiley <114682940+dwiley-akamai@users.noreply.github.com> --- ...r-10189-upcoming-features-1707838240012.md | 5 + .../AccountActivationError.tsx | 10 +- .../AccessKeyLanding/AccessKeyLanding.tsx | 2 +- .../AccessKeyTable/AccessKeyTableBody.tsx | 24 ++-- .../AccessKeyTable/AccessKeyTableRow.tsx | 84 ++++++++++++++ .../AccessKeyTable/AccessKeyTableRows.tsx | 109 ------------------ .../AccessKeyTable/HostNameTableCell.tsx | 65 +++++++++++ .../AccessKeyLanding/OMC_AccessKeyDrawer.tsx | 2 + .../BucketLanding/CreateBucketDrawer.test.tsx | 5 +- .../SecretTokenDialog/SecretTokenDialog.tsx | 93 ++++++++------- 10 files changed, 236 insertions(+), 163 deletions(-) create mode 100644 packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md create mode 100644 packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx delete mode 100644 packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRows.tsx create mode 100644 packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.tsx diff --git a/packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md b/packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md new file mode 100644 index 00000000000..9f90805efdc --- /dev/null +++ b/packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Handle errors gracefully when OBJ Multi-Cluster feature flag is enabled without MSW ([#10189](https://github.com/linode/manager/pull/10189)) diff --git a/packages/manager/src/components/AccountActivation/AccountActivationError.tsx b/packages/manager/src/components/AccountActivation/AccountActivationError.tsx index ad56e0fcc4b..c5e76f969f5 100644 --- a/packages/manager/src/components/AccountActivation/AccountActivationError.tsx +++ b/packages/manager/src/components/AccountActivation/AccountActivationError.tsx @@ -23,10 +23,12 @@ const AccountActivationError = (props: CombinedProps) => { return ( - {getAPIErrorOrDefault( - props.errors, - 'Your account is not yet activated. Please reach out to support@linode.com for more information' - )[0].reason} + { + getAPIErrorOrDefault( + props.errors, + 'Your account is not yet activated. Please reach out to support@linode.com for more information' + )[0].reason + } ); }; diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyLanding.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyLanding.tsx index 38d48b1d327..639b5a6d6ac 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyLanding.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyLanding.tsx @@ -30,8 +30,8 @@ import { AccessKeyDrawer } from './AccessKeyDrawer'; import { AccessKeyTable } from './AccessKeyTable/AccessKeyTable'; import { OMC_AccessKeyDrawer } from './OMC_AccessKeyDrawer'; import { RevokeAccessKeyDialog } from './RevokeAccessKeyDialog'; -import ViewPermissionsDrawer from './ViewPermissionsDrawer'; import { MODE, OpenAccessDrawer } from './types'; +import ViewPermissionsDrawer from './ViewPermissionsDrawer'; interface Props { accessDrawerOpen: boolean; diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableBody.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableBody.tsx index 70b112fc15b..241f0b43d77 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableBody.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableBody.tsx @@ -1,15 +1,16 @@ -import React from 'react'; import { ObjectStorageKey, RegionS3EndpointAndID, } from '@linode/api-v4/lib/object-storage'; import { APIError } from '@linode/api-v4/lib/types'; +import React from 'react'; import { TableRowEmpty } from 'src/components/TableRowEmpty/TableRowEmpty'; import { TableRowError } from 'src/components/TableRowError/TableRowError'; import { TableRowLoading } from 'src/components/TableRowLoading/TableRowLoading'; -import { AccessKeyTableRows } from './AccessKeyTableRows'; + import { OpenAccessDrawer } from '../types'; +import { AccessKeyTableRow } from './AccessKeyTableRow'; type Props = { data: ObjectStorageKey[] | undefined; @@ -52,13 +53,18 @@ export const AccessKeyTableBody = ({ return ( <> {data && data.length > 0 ? ( - + <> + {data.map((eachKey: ObjectStorageKey, index) => ( + + ))} + > ) : ( )} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx new file mode 100644 index 00000000000..828570409dd --- /dev/null +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx @@ -0,0 +1,84 @@ +import { + ObjectStorageKey, + RegionS3EndpointAndID, +} from '@linode/api-v4/lib/object-storage'; +import { styled } from '@mui/material/styles'; +import React from 'react'; + +import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip'; +import { TableCell } from 'src/components/TableCell'; +import { TableRow } from 'src/components/TableRow'; +import { Typography } from 'src/components/Typography'; +import { useAccountManagement } from 'src/hooks/useAccountManagement'; +import { useFlags } from 'src/hooks/useFlags'; +import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; + +import { OpenAccessDrawer } from '../types'; +import { AccessKeyActionMenu } from './AccessKeyActionMenu'; +import { HostNameTableCell } from './HostNameTableCell'; + +type Props = { + openDrawer: OpenAccessDrawer; + openRevokeDialog: (storageKeyData: ObjectStorageKey) => void; + setHostNames: (hostNames: RegionS3EndpointAndID[]) => void; + setShowHostNamesDrawers: (show: boolean) => void; + storageKeyData: ObjectStorageKey; +}; + +export const AccessKeyTableRow = ({ + openDrawer, + openRevokeDialog, + setHostNames, + setShowHostNamesDrawers, + storageKeyData, +}: Props) => { + const { account } = useAccountManagement(); + const flags = useFlags(); + + const isObjMultiClusterEnabled = isFeatureEnabled( + 'Object Storage Access Key Regions', + Boolean(flags.objMultiCluster), + account?.capabilities ?? [] + ); + + return ( + + + + {storageKeyData.label} + + + + + {storageKeyData.access_key} + + + + {isObjMultiClusterEnabled && ( + + )} + + + + + + ); +}; + +const StyledCopyIcon = styled(CopyTooltip)(({ theme }) => ({ + '& svg': { + height: 12, + top: 1, + width: 12, + }, + marginLeft: theme.spacing(), +})); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRows.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRows.tsx deleted file mode 100644 index e07d3083434..00000000000 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRows.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import { - ObjectStorageKey, - RegionS3EndpointAndID, -} from '@linode/api-v4/lib/object-storage'; - -import { styled } from '@mui/material/styles'; -import React from 'react'; - -import { StyledLinkButton } from 'src/components/Button/StyledLinkButton'; -import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip'; - -import { TableCell } from 'src/components/TableCell'; - -import { TableRow } from 'src/components/TableRow'; -import { Typography } from 'src/components/Typography'; -import { useAccountManagement } from 'src/hooks/useAccountManagement'; -import { useFlags } from 'src/hooks/useFlags'; -import { useRegionsQuery } from 'src/queries/regions'; -import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; -import { getRegionsByRegionId } from 'src/utilities/regions'; - -import { AccessKeyActionMenu } from './AccessKeyActionMenu'; -import { OpenAccessDrawer } from '../types'; - -type Props = { - objectStorageKeys: ObjectStorageKey[]; - openDrawer: OpenAccessDrawer; - openRevokeDialog: (objectStorageKey: ObjectStorageKey) => void; - setHostNames: (hostNames: RegionS3EndpointAndID[]) => void; - setShowHostNamesDrawers: (show: boolean) => void; -}; - -export const AccessKeyTableRows = ({ - objectStorageKeys, - openDrawer, - openRevokeDialog, - setHostNames, - setShowHostNamesDrawers, -}: Props) => { - const { account } = useAccountManagement(); - const { data: regionsData } = useRegionsQuery(); - const flags = useFlags(); - - const regionsLookup = regionsData && getRegionsByRegionId(regionsData); - - const isObjMultiClusterEnabled = isFeatureEnabled( - 'Object Storage Access Key Regions', - Boolean(flags.objMultiCluster), - account?.capabilities ?? [] - ); - - return ( - <> - {objectStorageKeys.map((eachKey: ObjectStorageKey) => ( - - - - {eachKey.label} - - - - - {eachKey.access_key} - - - - {isObjMultiClusterEnabled && regionsLookup && ( - - {`${regionsLookup[eachKey?.regions[0]?.id].label}: ${ - eachKey?.regions[0]?.s3_endpoint - } `} - {eachKey?.regions?.length === 1 && ( - - )} - {eachKey.regions.length > 1 && ( - { - setHostNames(eachKey.regions); - setShowHostNamesDrawers(true); - }} - type="button" - > - and {eachKey.regions.length - 1} more... - - )} - - )} - - - - - ))} - > - ); -}; - -const StyledCopyIcon = styled(CopyTooltip)(({ theme }) => ({ - '& svg': { - height: 12, - top: 1, - width: 12, - }, - marginLeft: theme.spacing(), -})); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.tsx new file mode 100644 index 00000000000..e1ece753526 --- /dev/null +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/HostNameTableCell.tsx @@ -0,0 +1,65 @@ +import { + ObjectStorageKey, + RegionS3EndpointAndID, +} from '@linode/api-v4/lib/object-storage'; +import { styled } from '@mui/material/styles'; +import React from 'react'; + +import { StyledLinkButton } from 'src/components/Button/StyledLinkButton'; +import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip'; +import { TableCell } from 'src/components/TableCell'; +import { useRegionsQuery } from 'src/queries/regions'; +import { getRegionsByRegionId } from 'src/utilities/regions'; + +type Props = { + setHostNames: (hostNames: RegionS3EndpointAndID[]) => void; + setShowHostNamesDrawers: (show: boolean) => void; + storageKeyData: ObjectStorageKey; +}; + +export const HostNameTableCell = ({ + setHostNames, + setShowHostNamesDrawers, + storageKeyData, +}: Props) => { + const { data: regionsData } = useRegionsQuery(); + + const regionsLookup = regionsData && getRegionsByRegionId(regionsData); + + const { regions } = storageKeyData; + + if (!regionsLookup || !regionsData || !regions) { + return ; + } + + return ( + + {`${regionsLookup[storageKeyData.regions[0].id].label}: ${ + storageKeyData?.regions[0]?.s3_endpoint + } `} + {storageKeyData?.regions?.length === 1 && ( + + )} + {storageKeyData.regions.length > 1 && ( + { + setHostNames(storageKeyData.regions); + setShowHostNamesDrawers(true); + }} + type="button" + > + and {storageKeyData.regions.length - 1} more... + + )} + + ); +}; + +const StyledCopyIcon = styled(CopyTooltip)(({ theme }) => ({ + '& svg': { + height: 12, + top: 1, + width: 12, + }, + marginLeft: theme.spacing(), +})); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx index 6231553e59a..c65e752c2a2 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx @@ -174,10 +174,12 @@ export const OMC_AccessKeyDrawer = (props: AccessKeyDrawerProps) => { : updateObjectStorageKeysSchema, }); + // @TODO OBJ Multicluster: The objectStorageKey check is a temporary fix to handle error cases when the feature flag is enabled without Mock Service Worker (MSW). This can be removed during the feature flag cleanup. const isSaveDisabled = isRestrictedUser || (mode !== 'creating' && objectStorageKey && + objectStorageKey?.regions?.length > 0 && !hasLabelOrRegionsChanged(formik.values, objectStorageKey)); const beforeSubmit = () => { diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx index b54025501cb..bd597a4a468 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx @@ -92,7 +92,10 @@ describe('CreateBucketDrawer', () => { getByTestId, } = renderWithTheme(, { queryClient }); - await userEvent.type(getByLabelText('Label', { exact: false }), 'my-test-bucket'); + await userEvent.type( + getByLabelText('Label', { exact: false }), + 'my-test-bucket' + ); // We must waitFor because we need to load region and cluster data from the API await waitFor(() => diff --git a/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx b/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx index aed649b7381..f49b977a3a0 100644 --- a/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx +++ b/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx @@ -76,46 +76,61 @@ export const SecretTokenDialog = (props: Props) => { spacingTop={8} variant="warning" /> - {isObjMultiClusterEnabled && ( - - - `${regionsLookup?.[region.id]?.label}: ${ - region.s3_endpoint - }` - ) - .join('\n') ?? '' - } - /> - - )} - {isObjMultiClusterEnabled && ( - ({ - backgroundColor: theme.bg.main, - border: `1px solid ${theme.color.grey3}`, - borderColor: theme.name === 'light' ? '#ccc' : '#222', - })} - > - {objectStorageKey?.regions.map((region, index) => ( - 0 && ( + + + `${regionsLookup?.[region.id]?.label}: ${ + region.s3_endpoint + }` + ) + .join('\n') ?? '' + } /> - ))} - - )} + + )} + {/* @TODO OBJ Multicluster: The objectStorageKey check is a temporary fix + to handle error cases when the feature flag is enabled without Mock + Service Worker (MSW). This can be removed during the feature flag cleanup. */} + {isObjMultiClusterEnabled && + objectStorageKey && + objectStorageKey?.regions?.length > 0 && ( + ({ + '.copyIcon': { + marginRight: 0, + paddingRight: 0, + }, + backgroundColor: theme.bg.main, + border: `1px solid ${theme.color.grey3}`, + borderColor: theme.name === 'light' ? '#ccc' : '#222', + padding: theme.spacing(1), + })} + > + {objectStorageKey?.regions.map((region, index) => ( + + ))} + + )} {objectStorageKey ? ( <> From a2be1750d5bc65da229d97bda47fc242720b25e7 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:52:30 -0500 Subject: [PATCH 12/37] chore: Update Storybook to latest to resolve `CVE-2023-42282` (#10212) * update storybook to latest * Added changeset: Update Storybook to latest to resolve CVE-2023-42282 --------- Co-authored-by: Banks Nussman --- .../pr-10212-tech-stories-1708530535485.md | 5 + packages/manager/package.json | 26 +- yarn.lock | 532 +++++++++++------- 3 files changed, 344 insertions(+), 219 deletions(-) create mode 100644 packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md diff --git a/packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md b/packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md new file mode 100644 index 00000000000..b3fff73342e --- /dev/null +++ b/packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Update Storybook to latest to resolve CVE-2023-42282 ([#10212](https://github.com/linode/manager/pull/10212)) diff --git a/packages/manager/package.json b/packages/manager/package.json index ad45dcd8b9c..f8d35bb819a 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -107,18 +107,18 @@ }, "devDependencies": { "@linode/eslint-plugin-cloud-manager": "^0.0.3", - "@storybook/addon-actions": "^7.6.10", - "@storybook/addon-controls": "^7.6.10", - "@storybook/addon-docs": "^7.6.10", - "@storybook/addon-mdx-gfm": "^7.6.10", - "@storybook/addon-measure": "^7.6.10", - "@storybook/addon-storysource": "^7.6.10", - "@storybook/addon-viewport": "^7.6.10", - "@storybook/addons": "^7.6.10", - "@storybook/client-api": "^7.6.10", - "@storybook/react": "^7.6.10", - "@storybook/react-vite": "^7.6.10", - "@storybook/theming": "^7.6.10", + "@storybook/addon-actions": "^7.6.17", + "@storybook/addon-controls": "^7.6.17", + "@storybook/addon-docs": "^7.6.17", + "@storybook/addon-mdx-gfm": "^7.6.17", + "@storybook/addon-measure": "^7.6.17", + "@storybook/addon-storysource": "^7.6.17", + "@storybook/addon-viewport": "^7.6.17", + "@storybook/addons": "^7.6.17", + "@storybook/client-api": "^7.6.17", + "@storybook/react": "^7.6.17", + "@storybook/react-vite": "^7.6.17", + "@storybook/theming": "^7.6.17", "@swc/core": "^1.3.1", "@testing-library/cypress": "^10.0.0", "@testing-library/jest-dom": "~6.4.2", @@ -197,7 +197,7 @@ "reselect-tools": "^0.0.7", "serve": "^14.0.1", "simple-git": "^3.19.0", - "storybook": "^7.6.10", + "storybook": "^7.6.17", "storybook-dark-mode": "^3.0.3", "ts-node": "^10.9.2", "vite": "^5.0.12", diff --git a/yarn.lock b/yarn.lock index 24f16828c76..26ae94aacef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2553,86 +2553,86 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@storybook/addon-actions@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.13.tgz#a1675fe2535e76228fa121fa1b30eb274349c0a4" - integrity sha512-uxjBLzJNJfj8oS0orgLt7/Gs5tLoP2xhBESi5vjk+7BZjAgfoA6w5IwMwmh9sRB3+aUx3ks7fGjE/hRT/YcaxA== +"@storybook/addon-actions@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.17.tgz#b1be5ab28b22b4a50c6aa0cd0a3671ca5b6f5f71" + integrity sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ== dependencies: - "@storybook/core-events" "7.6.13" + "@storybook/core-events" "7.6.17" "@storybook/global" "^5.0.0" "@types/uuid" "^9.0.1" dequal "^2.0.2" polished "^4.2.2" uuid "^9.0.0" -"@storybook/addon-controls@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.6.13.tgz#18eaf499e8e110b8a88ac209c8e4ea08090066ee" - integrity sha512-NdCEvr9xg3ANOSoEXKnB9jQR74n7G8XFWngnjJqviqXjRxiL7jwv2TCkyJyDTMmIAtPkHKU3NoD2Q1eQk16iYg== +"@storybook/addon-controls@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.6.17.tgz#354f3f85481e0a3318519b8c8aa5a3b1152e8de0" + integrity sha512-zR0aLaUF7FtV/nMRyfniFbCls/e0DAAoXACuOAUAwNAv0lbIS8AyZZiHSmKucCvziUQ6WceeCC7+du3C+9y0rQ== dependencies: - "@storybook/blocks" "7.6.13" + "@storybook/blocks" "7.6.17" lodash "^4.17.21" ts-dedent "^2.0.0" -"@storybook/addon-docs@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.13.tgz#b90b4a67d7aca2259bbcb90b17245b9f2bb09b4e" - integrity sha512-rRaHPVYuOrpLzk/KGemN/ePengYLL0Vly/Shb+nxcbDnKiraMELWsAkQEvEa/WbPa5sdpRD2+cJTqPcif4Du4g== +"@storybook/addon-docs@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.17.tgz#ea62be2da8b31df2c80a47cac4c30f66af4d2fbf" + integrity sha512-FKa4Mdy7nhgvEVZJHpMkHriDzpVHbohn87zv9NCL+Ctjs1iAmzGwxEm0culszyDS1HN2ToVoY0h8CSi2RSSZqA== dependencies: "@jest/transform" "^29.3.1" "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.6.13" - "@storybook/client-logger" "7.6.13" - "@storybook/components" "7.6.13" - "@storybook/csf-plugin" "7.6.13" - "@storybook/csf-tools" "7.6.13" + "@storybook/blocks" "7.6.17" + "@storybook/client-logger" "7.6.17" + "@storybook/components" "7.6.17" + "@storybook/csf-plugin" "7.6.17" + "@storybook/csf-tools" "7.6.17" "@storybook/global" "^5.0.0" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.6.13" - "@storybook/postinstall" "7.6.13" - "@storybook/preview-api" "7.6.13" - "@storybook/react-dom-shim" "7.6.13" - "@storybook/theming" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/node-logger" "7.6.17" + "@storybook/postinstall" "7.6.17" + "@storybook/preview-api" "7.6.17" + "@storybook/react-dom-shim" "7.6.17" + "@storybook/theming" "7.6.17" + "@storybook/types" "7.6.17" fs-extra "^11.1.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" -"@storybook/addon-mdx-gfm@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-7.6.13.tgz#542c96fe30d6fe5a94984d69941438aeb9cfeb4c" - integrity sha512-fc+y34MojGYDL9/5cg86tteORd7JTQaMzcfzK23+OIH1Fmy6mpbsFd5lkKOkof0GqvCL+iooS+Xa7IViq0l82w== +"@storybook/addon-mdx-gfm@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-7.6.17.tgz#4dcd5b32aa7b06b90521e41652c46e2b88dcdf86" + integrity sha512-Dh1jcegykRMAhQCpAh5NZzRnJMtk+QzYrxKZlY/EbXNRmxrvhrrCDjovf9ntqFlA6vQjDtkwNu3ZVcMBKLXmiw== dependencies: - "@storybook/node-logger" "7.6.13" + "@storybook/node-logger" "7.6.17" remark-gfm "^3.0.1" ts-dedent "^2.0.0" -"@storybook/addon-measure@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.6.13.tgz#26ff632bd7e99857df3f07a3ec46cb697b7b3529" - integrity sha512-WdxEicIy3x79kgP93HMf9hgbbW3h7xo3eNzrTaMsTeoXaolXWN9qdpusm8Cc8vDIP5JMd+gkwi2u563KjggXVQ== +"@storybook/addon-measure@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.6.17.tgz#a348b40dfa592c66b348457bd4f535f4ba481279" + integrity sha512-O5vnHZNkduvZ95jf1UssbOl6ivIxzl5tv+4EpScPYId7w700bxWsJH+QX7ip6KlrCf2o3iUhmPe8bm05ghG2KA== dependencies: "@storybook/global" "^5.0.0" tiny-invariant "^1.3.1" -"@storybook/addon-storysource@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-7.6.13.tgz#2dbfd9d33f28a25513946c2f5071fb9930c4e3f1" - integrity sha512-qnuD5MXUKabLjGbygQG0KThfgoFtfwgPltdGIcYTStrABBnhlkgoOLraX22XRXXGaQaS63tQXuDnbF/Jp0IC+A== +"@storybook/addon-storysource@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-7.6.17.tgz#f88b235f363d9780da76107555076c9db3c8b05e" + integrity sha512-8SZiIuIkRU9NQM3Y2mmE0m+bqtXQefzW8Z9DkPKwTJSJxVBvMZVMHjRiQcPn8ll6zhqQIaQiBj0ahlR8ZqrnqA== dependencies: - "@storybook/source-loader" "7.6.13" + "@storybook/source-loader" "7.6.17" estraverse "^5.2.0" tiny-invariant "^1.3.1" -"@storybook/addon-viewport@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.6.13.tgz#c0bb05584cc191c3079ca34cc10579aeba372ac9" - integrity sha512-yqUCWzp3IY/tlS488k9iAXMgOWW/rTswbVgGEh8alUg38QjbUnh4lKFLtd9Va8Fd1zNeVd9nkpCMTSsGy85uMg== +"@storybook/addon-viewport@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.6.17.tgz#db3c1f14bb4185f20d745c4e8cf2bd10f70ea336" + integrity sha512-sA0QCcf4QAMixWvn8uvRYPfkKCSl6JajJaAspoPqXSxHEpK7uwOlpg3kqFU5XJJPXD0X957M+ONgNvBzYqSpEw== dependencies: memoizerific "^1.11.3" -"@storybook/addons@^7.0.0", "@storybook/addons@^7.6.10": +"@storybook/addons@^7.0.0": version "7.6.13" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.13.tgz#fda1f435712cbdb6ce8b9c4b7e516589f8ec559d" integrity sha512-Vu7Su2GT1Sg6F43b01npnMSEALreoNeHPoL3BCJ52/7C4lHNopk4KOeeNbPP9TbVkfbICJi8L/u7MitVZZbhag== @@ -2641,22 +2641,31 @@ "@storybook/preview-api" "7.6.13" "@storybook/types" "7.6.13" -"@storybook/blocks@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.13.tgz#949b6a97ef749f484901d173e59fe88d20ad88d2" - integrity sha512-wjiwGHLIDfzgonxQaEOlQBR8H7U4hjOEkvkT6leaA3SXJaBgoZBD8zTqWqMX1Gl6vUmmRqMzq/nTSVai8Y1vVQ== +"@storybook/addons@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.17.tgz#6fd78ae3a3419bd91fdacbebd40062eb94f92155" + integrity sha512-Ok18Y698Ccyg++MoUNJNHY0cXUvo8ETFIRLJk1g9ElJ70j6kPgNnzW2pAtZkBNmswHtofZ7pT156cj96k/LgfA== dependencies: - "@storybook/channels" "7.6.13" - "@storybook/client-logger" "7.6.13" - "@storybook/components" "7.6.13" - "@storybook/core-events" "7.6.13" + "@storybook/manager-api" "7.6.17" + "@storybook/preview-api" "7.6.17" + "@storybook/types" "7.6.17" + +"@storybook/blocks@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.17.tgz#1329885be158f08104f806e5f23b7eb7f99c8b1c" + integrity sha512-PsNVoe0bX1mMn4Kk3nbKZ0ItDZZ0YJnYAFJ6toAbsyBAbgzg1sce88sQinzvbn58/RT9MPKeWMPB45ZS7ggiNg== + dependencies: + "@storybook/channels" "7.6.17" + "@storybook/client-logger" "7.6.17" + "@storybook/components" "7.6.17" + "@storybook/core-events" "7.6.17" "@storybook/csf" "^0.1.2" - "@storybook/docs-tools" "7.6.13" + "@storybook/docs-tools" "7.6.17" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.6.13" - "@storybook/preview-api" "7.6.13" - "@storybook/theming" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/manager-api" "7.6.17" + "@storybook/preview-api" "7.6.17" + "@storybook/theming" "7.6.17" + "@storybook/types" "7.6.17" "@types/lodash" "^4.14.167" color-convert "^2.0.1" dequal "^2.0.2" @@ -2670,15 +2679,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-manager@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.13.tgz#75d9e999810476e7422b532b79e26412876d8bda" - integrity sha512-RsZO7W33fYD5QKr//6DQ2+H0tdOt6BJ9I7U+3k5C8qCCoIW1CwYz/qbX+IB403k1yKKyw+Xau3F3tCVxR3j9Bw== +"@storybook/builder-manager@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.17.tgz#0d329bea94b5c4a7f88eaee02c42d49c4370c8b4" + integrity sha512-Sj8hcDYiPCCMfeLzus37czl0zdrAxAz4IyYam2jBjVymrIrcDAFyL1OCZvnq33ft179QYQWhUs9qwzVmlR/ZWg== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.6.13" - "@storybook/manager" "7.6.13" - "@storybook/node-logger" "7.6.13" + "@storybook/core-common" "7.6.17" + "@storybook/manager" "7.6.17" + "@storybook/node-logger" "7.6.17" "@types/ejs" "^3.1.1" "@types/find-cache-dir" "^3.2.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" @@ -2692,19 +2701,19 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-vite@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.6.13.tgz#bc75e8dd8a47a0901cc229da5b3992bdcfb50a63" - integrity sha512-BpOUP1QPS7NeTTTs5i2gUmORtjigo2S6B57Pb08vDyy1/1bd+NpkLvHvdc/TxBBc57FI4TS/7m8NtwIYHtwkcQ== - dependencies: - "@storybook/channels" "7.6.13" - "@storybook/client-logger" "7.6.13" - "@storybook/core-common" "7.6.13" - "@storybook/csf-plugin" "7.6.13" - "@storybook/node-logger" "7.6.13" - "@storybook/preview" "7.6.13" - "@storybook/preview-api" "7.6.13" - "@storybook/types" "7.6.13" +"@storybook/builder-vite@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.6.17.tgz#e6492fdde60b9d2e40e7ae0b18cae1bf362f28a3" + integrity sha512-2Q32qalI401EsKKr9Hkk8TAOcHEerqwsjCpQgTNJnCu6GgCVKoVUcb99oRbR9Vyg0xh+jb19XiWqqQujFtLYlQ== + dependencies: + "@storybook/channels" "7.6.17" + "@storybook/client-logger" "7.6.17" + "@storybook/core-common" "7.6.17" + "@storybook/csf-plugin" "7.6.17" + "@storybook/node-logger" "7.6.17" + "@storybook/preview" "7.6.17" + "@storybook/preview-api" "7.6.17" + "@storybook/types" "7.6.17" "@types/find-cache-dir" "^3.2.1" browser-assert "^1.2.1" es-module-lexer "^0.9.3" @@ -2726,23 +2735,35 @@ telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/cli@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.13.tgz#3fa2761adb7522b119f83f76286ddc79d7a519f2" - integrity sha512-9JBFckdWeJKU1xV3G3+L/kjuwNZm2RAUxac4GgVBxXACF0QU0nXml8Ss5ZA5nss+qCnn/gdRYRDNdfJ28L0/mw== +"@storybook/channels@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.17.tgz#5be1d1222a3ffdc90e1868230c2b2ee5dfc7a97f" + integrity sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA== + dependencies: + "@storybook/client-logger" "7.6.17" + "@storybook/core-events" "7.6.17" + "@storybook/global" "^5.0.0" + qs "^6.10.0" + telejson "^7.2.0" + tiny-invariant "^1.3.1" + +"@storybook/cli@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.17.tgz#04462c97a926e3dfcc18f3df02519effe29740e2" + integrity sha512-1sCo+nCqyR+nKfTcEidVu8XzNoECC7Y1l+uW38/r7s2f/TdDorXaIGAVrpjbSaXSoQpx5DxYJVaKCcQuOgqwcA== dependencies: "@babel/core" "^7.23.2" "@babel/preset-env" "^7.23.2" "@babel/types" "^7.23.0" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.6.13" - "@storybook/core-common" "7.6.13" - "@storybook/core-events" "7.6.13" - "@storybook/core-server" "7.6.13" - "@storybook/csf-tools" "7.6.13" - "@storybook/node-logger" "7.6.13" - "@storybook/telemetry" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/codemod" "7.6.17" + "@storybook/core-common" "7.6.17" + "@storybook/core-events" "7.6.17" + "@storybook/core-server" "7.6.17" + "@storybook/csf-tools" "7.6.17" + "@storybook/node-logger" "7.6.17" + "@storybook/telemetry" "7.6.17" + "@storybook/types" "7.6.17" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" @@ -2772,13 +2793,13 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.6.13.tgz#2d8efffde6572e3e6407772a16f8ead2d0bccfcd" - integrity sha512-95u4Uip0/LNA0xuX9Tg60zCfFuqtYPVn5nvFd3IRZaUewhsioe5lfDSkbmVPycGZq3V8vKC9buaIBTxgoyKh7Q== +"@storybook/client-api@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.6.17.tgz#2d7eba528450881a2b72d06e583b8206ffca3178" + integrity sha512-rsxKBRLtUmBXbxG79Pf1GzUuMDMsFdhNR/a5k7kIA/mlEsvWD8are/aH/zk1oLr7+5QOqEkiXLL6+Erry7dzXA== dependencies: - "@storybook/client-logger" "7.6.13" - "@storybook/preview-api" "7.6.13" + "@storybook/client-logger" "7.6.17" + "@storybook/preview-api" "7.6.17" "@storybook/client-logger@7.6.13": version "7.6.13" @@ -2787,18 +2808,25 @@ dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.13.tgz#97cfdaa3b0bfa71db85bf1eaa05e22f20eef13b7" - integrity sha512-QjjVAxT/NnCN4hJ5TLf2wQtddfwn9r0yaFMxLb3gGsjW/ZVzmp4xOS5KeqUUXXbb1wjYWv56Egamkrs/qoUTyA== +"@storybook/client-logger@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.17.tgz#5031c47b7df8d8792fe9dfed5828222f515e5803" + integrity sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ== + dependencies: + "@storybook/global" "^5.0.0" + +"@storybook/codemod@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.17.tgz#c93d87d74f43fd475d48edb178233e89329b72c2" + integrity sha512-JuTmf2u3C4fCnjO7o3dqRgrq3ozNYfWlrRP8xuIdvT7niMap7a396hJtSKqS10FxCgKFcMAOsRgrCalH1dWxUg== dependencies: "@babel/core" "^7.23.2" "@babel/preset-env" "^7.23.2" "@babel/types" "^7.23.0" "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.13" - "@storybook/node-logger" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/csf-tools" "7.6.17" + "@storybook/node-logger" "7.6.17" + "@storybook/types" "7.6.17" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" globby "^11.0.2" @@ -2807,7 +2835,23 @@ prettier "^2.8.0" recast "^0.23.1" -"@storybook/components@7.6.13", "@storybook/components@^7.0.0": +"@storybook/components@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.17.tgz#f02a47ad42432f8ea518321a145a074e4c11649f" + integrity sha512-lbh7GynMidA+CZcJnstVku6Nhs+YkqjYaZ+mKPugvlVhGVWv0DaaeQFVuZ8cJtUGJ/5FFU4Y+n+gylYUHkGBMA== + dependencies: + "@radix-ui/react-select" "^1.2.2" + "@radix-ui/react-toolbar" "^1.0.4" + "@storybook/client-logger" "7.6.17" + "@storybook/csf" "^0.1.2" + "@storybook/global" "^5.0.0" + "@storybook/theming" "7.6.17" + "@storybook/types" "7.6.17" + memoizerific "^1.11.3" + use-resize-observer "^9.1.0" + util-deprecate "^1.0.2" + +"@storybook/components@^7.0.0": version "7.6.13" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.13.tgz#a9792015c7190f2a1e5ae0f5f847bb509d9450e4" integrity sha512-IkUermvJFOCooJwlR1mamnByjSGukKjkmFGue6HWc64cZ+/DTwgHzh9O/XV82fnfTTMJ2CjOFYlYVr3brDqTVg== @@ -2823,22 +2867,22 @@ use-resize-observer "^9.1.0" util-deprecate "^1.0.2" -"@storybook/core-client@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.13.tgz#733307f75f1925b136627bcb9f701d390a1ec824" - integrity sha512-6tzWZ5u/8YXSthVuBqDHGABqALsiv/h+IiYaeg+UPWgz7sYwyj/IoFlHN1/du/h1wV5bc8GZyPcAIrOHxF60rQ== +"@storybook/core-client@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.17.tgz#eace9819b64febf0d5ab2743f65ec5dfe4e3a410" + integrity sha512-LuDbADK+DPNAOOCXOlvY09hdGVueXlDetsdOJ/DgYnSa9QSWv9Uv+F8QcEgR3QckZJbPlztKJIVLgP2n/Xkijw== dependencies: - "@storybook/client-logger" "7.6.13" - "@storybook/preview-api" "7.6.13" + "@storybook/client-logger" "7.6.17" + "@storybook/preview-api" "7.6.17" -"@storybook/core-common@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.13.tgz#46b47cce8f563a4542e9d5a9128733bc2229469d" - integrity sha512-kCCVDga/66wIWFSluT3acD3/JT3vwV7A9rxG8FZF5K38quU/b37sRXvCw8Yk5HJ4rQhrB76cxVhIOy/ZucaZVw== +"@storybook/core-common@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.17.tgz#12760703f08d8f741de0f1fe7026346438251951" + integrity sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g== dependencies: - "@storybook/core-events" "7.6.13" - "@storybook/node-logger" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/core-events" "7.6.17" + "@storybook/node-logger" "7.6.17" + "@storybook/types" "7.6.17" "@types/find-cache-dir" "^3.2.1" "@types/node" "^18.0.0" "@types/node-fetch" "^2.6.4" @@ -2867,26 +2911,33 @@ dependencies: ts-dedent "^2.0.0" -"@storybook/core-server@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.13.tgz#66116d3c8cd5965e40a246f0eabc4313ec29781a" - integrity sha512-kcHhCL8XDv4k5QJqBVWOYJ2lwX6orQHnx0N7fvLhJ7IHtUp1YQYn1+ufnGFZBlpNGGvPwz3oX4hmOT1G+PQdlw== +"@storybook/core-events@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.17.tgz#9e1a795558193089fb227cfe2cf768c99418a640" + integrity sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA== + dependencies: + ts-dedent "^2.0.0" + +"@storybook/core-server@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.17.tgz#bf5b7a9db7abe157a14dba6279936e43efa79250" + integrity sha512-KWGhTTaL1Q14FolcoKKZgytlPJUbH6sbJ1Ptj/84EYWFewcnEgVs0Zlnh1VStRZg+Rd1WC1V4yVd/bbDzxrvQA== dependencies: "@aw-web-design/x-default-browser" "1.4.126" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.6.13" - "@storybook/channels" "7.6.13" - "@storybook/core-common" "7.6.13" - "@storybook/core-events" "7.6.13" + "@storybook/builder-manager" "7.6.17" + "@storybook/channels" "7.6.17" + "@storybook/core-common" "7.6.17" + "@storybook/core-events" "7.6.17" "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.13" + "@storybook/csf-tools" "7.6.17" "@storybook/docs-mdx" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "7.6.13" - "@storybook/node-logger" "7.6.13" - "@storybook/preview-api" "7.6.13" - "@storybook/telemetry" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/manager" "7.6.17" + "@storybook/node-logger" "7.6.17" + "@storybook/preview-api" "7.6.17" + "@storybook/telemetry" "7.6.17" + "@storybook/types" "7.6.17" "@types/detect-port" "^1.3.0" "@types/node" "^18.0.0" "@types/pretty-hrtime" "^1.0.0" @@ -2899,7 +2950,7 @@ express "^4.17.3" fs-extra "^11.1.0" globby "^11.0.2" - ip "^2.0.0" + ip "^2.0.1" lodash "^4.17.21" open "^8.4.0" pretty-hrtime "^1.0.3" @@ -2914,25 +2965,25 @@ watchpack "^2.2.0" ws "^8.2.3" -"@storybook/csf-plugin@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.13.tgz#8585d9c61b9627c46e0a8e7daf60560eddef41b9" - integrity sha512-ZTyAao/W8Aob6wT1nC4cTfBjWAT9FN0Y9nzairbvNOiqRkAvk3w/02K4BauESHYMm06QC8Pg0tzS1s+tWJtRRQ== +"@storybook/csf-plugin@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.17.tgz#6acf738b62e14a74a90ef68d7567e2fc1d1bd68f" + integrity sha512-xTHv9BUh3bkDVCvcbmdfVF0/e96BdrEgqPJ3G3RmKbSzWLOkQ2U9yiPfHzT0KJWPhVwj12fjfZp0zunu+pcS6Q== dependencies: - "@storybook/csf-tools" "7.6.13" + "@storybook/csf-tools" "7.6.17" unplugin "^1.3.1" -"@storybook/csf-tools@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.13.tgz#c7a59063d6151b44760183d283e2996cf9d24e95" - integrity sha512-N0erD3fhbZIDkQpcHlNTLvkpWVVtpiOjY3JO8B5SdBT2uQ8T7aXx7IEM3Q8g1f/BpfjkM15rZl9r4HFtm5E43Q== +"@storybook/csf-tools@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.17.tgz#366bb2348fc1a62f90cdbd6cce4aa5e7293984eb" + integrity sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ== dependencies: "@babel/generator" "^7.23.0" "@babel/parser" "^7.23.0" "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.13" + "@storybook/types" "7.6.17" fs-extra "^11.1.0" recast "^0.23.1" ts-dedent "^2.0.0" @@ -2956,14 +3007,14 @@ resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== -"@storybook/docs-tools@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.13.tgz#0e5ec2b3054f1435d144e21aa7390374427c17bc" - integrity sha512-m3YAyNRQ97vm/rLj48Lgg8jjhbjr+668aADU49S50zjwtvC7H9C0h8PJI3LyE1Owxg2Ld2B6bG5wBv30nPnxZg== +"@storybook/docs-tools@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.17.tgz#4c38025be46c991bfe994bd82996708210e51d2f" + integrity sha512-bYrLoj06adqklyLkEwD32C0Ww6t+9ZVvrJHiVT42bIhTRpFiFPAetl1a9KPHtFLnfduh4n2IxIr1jv32ThPDTA== dependencies: - "@storybook/core-common" "7.6.13" - "@storybook/preview-api" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/core-common" "7.6.17" + "@storybook/preview-api" "7.6.17" + "@storybook/types" "7.6.17" "@types/doctrine" "^0.0.3" assert "^2.1.0" doctrine "^3.0.0" @@ -2994,25 +3045,45 @@ telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.13.tgz#1793fc3c562984c8dbe7ade1ec3314a5675705d0" - integrity sha512-f/Qecur8pXSncdmll7dYyP8EZ+IzzReIN8eZF/NHKULfnBkIkRxf+w4LlXBgOwgU36DdsW+VH0OuGMWeeqTUwA== +"@storybook/manager-api@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.17.tgz#cdf0bb8e5bdc3da2559150125b3d6a3ff72f0def" + integrity sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg== + dependencies: + "@storybook/channels" "7.6.17" + "@storybook/client-logger" "7.6.17" + "@storybook/core-events" "7.6.17" + "@storybook/csf" "^0.1.2" + "@storybook/global" "^5.0.0" + "@storybook/router" "7.6.17" + "@storybook/theming" "7.6.17" + "@storybook/types" "7.6.17" + dequal "^2.0.2" + lodash "^4.17.21" + memoizerific "^1.11.3" + store2 "^2.14.2" + telejson "^7.2.0" + ts-dedent "^2.0.0" + +"@storybook/manager@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.17.tgz#56e820ede16f6b824ec6b016082d1d10dbb02759" + integrity sha512-A1LDDIqMpwRzq/dqkbbiza0QI04o4ZHCl2a3UMDZUV/+QLc2nsr2DAaLk4CVL4/cIc5zGqmIcaOTvprx2YKVBw== "@storybook/mdx2-csf@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== -"@storybook/node-logger@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.13.tgz#bab8256bafa7f54be7d2465db8a72d5f73cec679" - integrity sha512-Ci/2Gd0+Qd3fX6GWGS1UAa/bTl0uALsEuMuzOO0meKEPEEYZvBFCoeK6lP1ysMnxWxKaDjxNr01JlTpmjfT6ag== +"@storybook/node-logger@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.17.tgz#2747cee5395c3644408df2423d98502663c4bcf6" + integrity sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA== -"@storybook/postinstall@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.13.tgz#31aefcd7f18d7e85e8837265b01665853a480841" - integrity sha512-6NohciDuEPWSjMrUfhFjawfFUCvR70IDtAjjYhfXlSesyt06fXqbht1VrKhSsRjvwzbhYeiza5Uh/ujvSgxeGg== +"@storybook/postinstall@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.17.tgz#7218b416dfa6d36b5bdbd3e61afc9a2381f82c28" + integrity sha512-WaWqB8o9vUc9aaVls+povQSVirf1Xd1LZcVhUKfAocAF3mzYUsnJsVqvnbjRj/F96UFVihOyDt9Zjl/9OvrCvQ== "@storybook/preview-api@7.6.13": version "7.6.13" @@ -3034,41 +3105,61 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.13.tgz#473a625be3ed7c46a15e922ed568b485074fc472" - integrity sha512-XW8+6PRVC/AfdY4Vf67XFNu9bNi5AwyLnLz7v+H4VEv+AnalRDXuszQcT6rUEumDDsDx2uwAhVs19xaQyAJu/w== +"@storybook/preview-api@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.17.tgz#03dd399bf3bb8ac6f4aad3c738365b86b8790157" + integrity sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw== + dependencies: + "@storybook/channels" "7.6.17" + "@storybook/client-logger" "7.6.17" + "@storybook/core-events" "7.6.17" + "@storybook/csf" "^0.1.2" + "@storybook/global" "^5.0.0" + "@storybook/types" "7.6.17" + "@types/qs" "^6.9.5" + dequal "^2.0.2" + lodash "^4.17.21" + memoizerific "^1.11.3" + qs "^6.10.0" + synchronous-promise "^2.0.15" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" -"@storybook/react-dom-shim@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.13.tgz#7309a55f65749098984461f04f2b2ee6d27f74f9" - integrity sha512-8nrys2WAFymVjywM4GrqVL1fxTfgjWkONJuH7eBbVE2SmgG87NN4lchG/V+TpkFOTkYnGwJRqUcWSqRBUoHLrg== +"@storybook/preview@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.17.tgz#e0c9727c7cfbd8f1d504848a57acaab8e54abe90" + integrity sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw== -"@storybook/react-vite@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.13.tgz#bf25917ed4560759c82f335e8baab6df4d210771" - integrity sha512-swdHnDXzGD0SCxlLqTS1QgjnmNgz8yLTuuQIM8uoMD8/Obeb/zp19Xj+tGr9LIL7u8/tspKJAyDUf9HVyh18lQ== +"@storybook/react-dom-shim@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.17.tgz#5875915316f687bf658cc6686ea49f2928eae4b2" + integrity sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw== + +"@storybook/react-vite@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.17.tgz#29ea46ef27595d10ad115b33833ed5b167f02960" + integrity sha512-4dIm3CuRl44X1TLzN3WoZh/bChzJF7Ud28li9atj9C8db0bb/y0zl8cahrsRFoR7/LyfqdOVLqaztrnA5SsWfg== dependencies: "@joshwooding/vite-plugin-react-docgen-typescript" "0.3.0" "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "7.6.13" - "@storybook/react" "7.6.13" + "@storybook/builder-vite" "7.6.17" + "@storybook/react" "7.6.17" "@vitejs/plugin-react" "^3.0.1" magic-string "^0.30.0" react-docgen "^7.0.0" -"@storybook/react@7.6.13", "@storybook/react@^7.6.10": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.13.tgz#0e146fe49651d9fbc16ffc7439040e00228996f8" - integrity sha512-DjA2uyiUnDT6w0ibzsq++5z6V49bNURfuXUmPbqe6dAPvoKtMFgrT/7h+LN/0PnLe9MKhFXKpmHyUwjAQLS1QA== +"@storybook/react@7.6.17", "@storybook/react@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.17.tgz#3e585b37f4a45d01b60543e1952a46ae3da70e81" + integrity sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA== dependencies: - "@storybook/client-logger" "7.6.13" - "@storybook/core-client" "7.6.13" - "@storybook/docs-tools" "7.6.13" + "@storybook/client-logger" "7.6.17" + "@storybook/core-client" "7.6.17" + "@storybook/docs-tools" "7.6.17" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.6.13" - "@storybook/react-dom-shim" "7.6.13" - "@storybook/types" "7.6.13" + "@storybook/preview-api" "7.6.17" + "@storybook/react-dom-shim" "7.6.17" + "@storybook/types" "7.6.17" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^18.0.0" @@ -3093,32 +3184,41 @@ memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/source-loader@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.6.13.tgz#d24af2a43ec2c13c8e1f3c7cf81dbc3049c7efee" - integrity sha512-mPQWmnbtojjFWWFTQ1tThpM+VzjBllqUp6mhzXTohoWdnvxjR9b5NDVj5dRR4U/FgYxpzMpoa3jk2tJFGwMDzg== +"@storybook/router@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.17.tgz#de5016086191846ed12af7495aeddcc373cbd0d4" + integrity sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A== + dependencies: + "@storybook/client-logger" "7.6.17" + memoizerific "^1.11.3" + qs "^6.10.0" + +"@storybook/source-loader@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.6.17.tgz#a9ebc2ed6e6fa3041f80cd1df1775505b5bc8513" + integrity sha512-90v1es7dHmHgkGbflPlaRBYcn2+mqdC8OG4QtyYqOUq6xsLsyg+5CX2rupfHbuSLw9r0A3o1ViOII2J/kWtFow== dependencies: "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.13" + "@storybook/types" "7.6.17" estraverse "^5.2.0" lodash "^4.17.21" prettier "^2.8.0" -"@storybook/telemetry@7.6.13": - version "7.6.13" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.13.tgz#88f24a900497c20267484b51dc7be214e1fc0ac9" - integrity sha512-G23QTpCd3W83NISTFSFjq5SyePRaQUin7F9KnafJM54cMDya7xi7aPUrlVRc5zi2Gfr8PJ8tTna1C4k3cIrHFw== +"@storybook/telemetry@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.17.tgz#472dd6a8d87240c1fcc01bb9d6247e134e539b5b" + integrity sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA== dependencies: - "@storybook/client-logger" "7.6.13" - "@storybook/core-common" "7.6.13" - "@storybook/csf-tools" "7.6.13" + "@storybook/client-logger" "7.6.17" + "@storybook/core-common" "7.6.17" + "@storybook/csf-tools" "7.6.17" chalk "^4.1.0" detect-package-manager "^2.0.1" fetch-retry "^5.0.2" fs-extra "^11.1.0" read-pkg-up "^7.0.1" -"@storybook/theming@7.6.13", "@storybook/theming@^7.0.0", "@storybook/theming@^7.6.10": +"@storybook/theming@7.6.13", "@storybook/theming@^7.0.0": version "7.6.13" resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.13.tgz#9026cf418101f7532da79e3684ac444e5daa6f2f" integrity sha512-Dj+zVF2CVdTrynjSW3Iydajc8EKCQCYNYA3bpkid0LltAIe8mLTkuTBYiI5CgviWmQc55iBrNpF2MA5AzW5Q3Q== @@ -3128,6 +3228,16 @@ "@storybook/global" "^5.0.0" memoizerific "^1.11.3" +"@storybook/theming@7.6.17", "@storybook/theming@^7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.17.tgz#8170e3e72b921380c51a3970890d4cb479a65c2f" + integrity sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA== + dependencies: + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@storybook/client-logger" "7.6.17" + "@storybook/global" "^5.0.0" + memoizerific "^1.11.3" + "@storybook/types@7.6.13": version "7.6.13" resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.13.tgz#4d957ac6ddb2213b90525b28b8548749899c2f18" @@ -3138,6 +3248,16 @@ "@types/express" "^4.7.0" file-system-cache "2.3.0" +"@storybook/types@7.6.17": + version "7.6.17" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.17.tgz#0b3c27cb1708c0545a9ea1a23b73aa8852dd47c4" + integrity sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q== + dependencies: + "@storybook/channels" "7.6.17" + "@types/babel__core" "^7.0.0" + "@types/express" "^4.7.0" + file-system-cache "2.3.0" + "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" @@ -8228,10 +8348,10 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== ipaddr.js@1.9.1, ipaddr.js@^1.9.1: version "1.9.1" @@ -12341,12 +12461,12 @@ storybook-dark-mode@^3.0.3: fast-deep-equal "^3.1.3" memoizerific "^1.11.3" -storybook@^7.6.10: - version "7.6.13" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.13.tgz#f11b92c6e8cd2b846b03aefaed1d81ecbe20664d" - integrity sha512-c06c27f1m9OeXUtyA0/pwVLWJo+OD9SDIaTcPtojtwt5QEtSKfhQN+b9fnq/+GXRAHdkPF13AqR0uCXJZ/9Xtw== +storybook@^7.6.17: + version "7.6.17" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.17.tgz#d7fdbbf57d61d386b3ccc6721285bc914f54269b" + integrity sha512-8+EIo91bwmeFWPg1eysrxXlhIYv3OsXrznTr4+4Eq0NikqAoq6oBhtlN5K2RGS2lBVF537eN+9jTCNbR+WrzDA== dependencies: - "@storybook/cli" "7.6.13" + "@storybook/cli" "7.6.17" stream-shift@^1.0.0: version "1.0.3" From 046e5ce03df8d2504f79adf16823d674e834825b Mon Sep 17 00:00:00 2001 From: jdamore-linode <97627410+jdamore-linode@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:15:06 -0500 Subject: [PATCH 13/37] test: [M3-7434]: Add a Cypress test for OBJ Multicluster Bucket create flow (#10211) * Add `ui.autocompletePopper.find()` util * Update OBJ bucket create intercept util to accept a mock object * Add Cypress test for OBJ Multicluster bucket create --- .../pr-10211-tests-1708466647763.md | 5 + .../object-storage.smoke.spec.ts | 143 +++++++++++++++++- .../support/intercepts/object-storage.ts | 36 +++-- .../cypress/support/ui/autocomplete.ts | 9 +- 4 files changed, 178 insertions(+), 15 deletions(-) create mode 100644 packages/manager/.changeset/pr-10211-tests-1708466647763.md diff --git a/packages/manager/.changeset/pr-10211-tests-1708466647763.md b/packages/manager/.changeset/pr-10211-tests-1708466647763.md new file mode 100644 index 00000000000..c26a92e7d5c --- /dev/null +++ b/packages/manager/.changeset/pr-10211-tests-1708466647763.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tests +--- + +Add test for OBJ Multicluster bucket create flow ([#10211](https://github.com/linode/manager/pull/10211)) diff --git a/packages/manager/cypress/e2e/core/objectStorage/object-storage.smoke.spec.ts b/packages/manager/cypress/e2e/core/objectStorage/object-storage.smoke.spec.ts index e08a6fb50e1..8974866fb6b 100644 --- a/packages/manager/cypress/e2e/core/objectStorage/object-storage.smoke.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorage/object-storage.smoke.spec.ts @@ -4,6 +4,7 @@ import 'cypress-file-upload'; import { objectStorageBucketFactory } from 'src/factories/objectStorage'; +import { mockGetRegions } from 'support/intercepts/regions'; import { mockCreateBucket, mockDeleteBucket, @@ -13,11 +14,137 @@ import { mockGetBucketObjects, mockUploadBucketObject, mockUploadBucketObjectS3, + mockCreateBucketError, } from 'support/intercepts/object-storage'; -import { randomLabel } from 'support/util/random'; +import { + mockAppendFeatureFlags, + mockGetFeatureFlagClientstream, +} from 'support/intercepts/feature-flags'; +import { makeFeatureFlagData } from 'support/util/feature-flags'; +import { randomLabel, randomString } from 'support/util/random'; import { ui } from 'support/ui'; +import { regionFactory } from 'src/factories'; describe('object storage smoke tests', () => { + /* + * - Tests Object Storage bucket creation flow when OBJ Multicluster is enabled. + * - Confirms that expected regions are displayed in drop-down. + * - Confirms that region can be selected during create. + * - Confirms that API errors are handled gracefully by drawer. + * - Confirms that request payload contains desired Bucket region and not cluster. + * - Confirms that created Bucket is listed on the landing page. + */ + it('can create object storage bucket with OBJ Multicluster', () => { + const mockErrorMessage = 'An unknown error has occurred.'; + + const mockRegionWithObj = regionFactory.build({ + label: randomLabel(), + id: `${randomString(2)}-${randomString(3)}`, + capabilities: ['Object Storage'], + }); + + const mockRegionsWithoutObj = regionFactory.buildList(2, { + capabilities: [], + }); + + const mockRegions = [mockRegionWithObj, ...mockRegionsWithoutObj]; + + const mockBucket = objectStorageBucketFactory.build({ + label: randomLabel(), + region: mockRegionWithObj.id, + cluster: undefined, + objects: 0, + }); + + mockAppendFeatureFlags({ + objMultiCluster: makeFeatureFlagData(true), + }).as('getFeatureFlags'); + mockGetFeatureFlagClientstream().as('getClientStream'); + + mockGetRegions(mockRegions).as('getRegions'); + mockGetBuckets([]).as('getBuckets'); + mockCreateBucketError(mockErrorMessage).as('createBucket'); + + cy.visitWithLogin('/object-storage'); + cy.wait(['@getRegions', '@getBuckets']); + + ui.button + .findByTitle('Create Bucket') + .should('be.visible') + .should('be.enabled') + .click(); + + ui.drawer + .findByTitle('Create Bucket') + .should('be.visible') + .within(() => { + // Submit button is disabled when fields are empty. + ui.buttonGroup + .findButtonByTitle('Create Bucket') + .should('be.visible') + .should('be.disabled'); + + // Enter label. + cy.contains('Label').click().type(mockBucket.label); + + cy.contains('Region').click().type(mockRegionWithObj.label); + + ui.autocompletePopper + .find() + .should('be.visible') + .within(() => { + // Confirm that regions without 'Object Storage' capability are not listed. + mockRegionsWithoutObj.forEach((mockRegionWithoutObj) => { + cy.contains(mockRegionWithoutObj.id).should('not.exist'); + }); + + // Confirm that region with 'Object Storage' capability is listed, + // then select it. + cy.findByText( + `${mockRegionWithObj.label} (${mockRegionWithObj.id})` + ) + .should('be.visible') + .click(); + }); + + // Close region select. + cy.contains('Region').click(); + + // On first attempt, mock an error response and confirm message is shown. + ui.buttonGroup + .findButtonByTitle('Create Bucket') + .should('be.visible') + .click(); + + cy.wait('@createBucket'); + cy.findByText(mockErrorMessage).should('be.visible'); + + // Click submit again, mock a successful response. + mockCreateBucket(mockBucket).as('createBucket'); + ui.buttonGroup + .findButtonByTitle('Create Bucket') + .should('be.visible') + .click(); + }); + + // Confirm that Cloud includes the "region" property and omits the "cluster" + // property in its payload when creating a bucket. + cy.wait('@createBucket').then((xhr) => { + const body = xhr.request.body; + expect(body.cluster).to.be.undefined; + expect(body.region).to.eq(mockRegionWithObj.id); + }); + + cy.findByText(mockBucket.label) + .should('be.visible') + .closest('tr') + .within(() => { + // TODO Confirm that bucket region is shown in landing page. + cy.findByText(mockBucket.hostname).should('be.visible'); + // cy.findByText(mockRegionWithObj.label).should('be.visible'); + }); + }); + /* * - Tests core object storage bucket create flow using mocked API responses. * - Creates bucket. @@ -29,8 +156,20 @@ describe('object storage smoke tests', () => { const bucketCluster = 'us-southeast-1'; const bucketHostname = `${bucketLabel}.${bucketCluster}.linodeobjects.com`; + const mockBucket = objectStorageBucketFactory.build({ + label: bucketLabel, + cluster: bucketCluster, + hostname: bucketHostname, + }); + + mockAppendFeatureFlags({ + objMultiCluster: makeFeatureFlagData(false), + }).as('getFeatureFlags'); + mockGetFeatureFlagClientstream().as('getClientStream'); + mockGetBuckets([]).as('getBuckets'); - mockCreateBucket(bucketLabel, bucketCluster).as('createBucket'); + + mockCreateBucket(mockBucket).as('createBucket'); cy.visitWithLogin('/object-storage'); cy.wait('@getBuckets'); diff --git a/packages/manager/cypress/support/intercepts/object-storage.ts b/packages/manager/cypress/support/intercepts/object-storage.ts index f993da79d73..8d13d437d8c 100644 --- a/packages/manager/cypress/support/intercepts/object-storage.ts +++ b/packages/manager/cypress/support/intercepts/object-storage.ts @@ -7,13 +7,12 @@ import { apiMatcher } from 'support/util/intercepts'; import { paginateResponse } from 'support/util/paginate'; import { makeResponse } from 'support/util/response'; -import { objectStorageBucketFactory } from 'src/factories/objectStorage'; - import type { ObjectStorageBucket, ObjectStorageKey, ObjectStorageCluster, } from '@linode/api-v4'; +import { makeErrorResponse } from 'support/util/errors'; /** * Intercepts GET requests to fetch buckets. @@ -80,25 +79,38 @@ export const interceptCreateBucket = (): Cypress.Chainable => { }; /** - * Intercepts POST request to create bucket and mocks response. + * Intercepts POST request to create a bucket and mocks response. * - * @param label - Object storage bucket label. - * @param cluster - Object storage bucket cluster. + * @param bucket - Bucket with which to mock response. * * @returns Cypress chainable. */ export const mockCreateBucket = ( - label: string, - cluster: string + bucket: ObjectStorageBucket +): Cypress.Chainable => { + return cy.intercept( + 'POST', + apiMatcher('object-storage/buckets'), + makeResponse(bucket) + ); +}; + +/** + * Intercepts POST request to create a bucket and mocks an error response. + * + * @param errorMessage - Optional error message with which to mock response. + * @param statusCode - HTTP status code with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockCreateBucketError = ( + errorMessage: string = 'An unknown error occurred.', + statusCode: number = 500 ): Cypress.Chainable => { return cy.intercept( 'POST', apiMatcher('object-storage/buckets'), - objectStorageBucketFactory.build({ - cluster, - hostname: `${label}.${cluster}.linodeobjects.com`, - label, - }) + makeErrorResponse(errorMessage, statusCode) ); }; diff --git a/packages/manager/cypress/support/ui/autocomplete.ts b/packages/manager/cypress/support/ui/autocomplete.ts index 94e391232b1..e87e51f1f6f 100644 --- a/packages/manager/cypress/support/ui/autocomplete.ts +++ b/packages/manager/cypress/support/ui/autocomplete.ts @@ -19,7 +19,14 @@ export const autocomplete = { */ export const autocompletePopper = { /** - * Finds a autocomplete popper that has the given title. + * Finds an open autocomplete popper. + */ + find: () => { + return cy.document().its('body').find('[data-qa-autocomplete-popper]'); + }, + + /** + * Finds an item within an autocomplete popper that has the given title. */ findByTitle: ( title: string, From 5518871ddba0b3e51d9465b07dc41e2fffd367eb Mon Sep 17 00:00:00 2001 From: cpathipa <119517080+cpathipa@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:12:59 -0600 Subject: [PATCH 14/37] upcoming: [M3-7733] - Access key "Permissions" drawer ARIA label needs to be updated for OBJ Multicluster (#10213) * upcoming: [M3-7733] - Access key "Permissions" drawer ARIA label needs to be updated for OBJ Multicluster * Added changeset: Update access key Permissions drawer ARIA label for OBJ Multicluster. * Update access-keys.smoke.spec.ts * Update packages/manager/cypress/e2e/core/objectStorage/access-keys.smoke.spec.ts Co-authored-by: jdamore-linode <97627410+jdamore-linode@users.noreply.github.com> * upcoming: [M3-7733] - Secret Key modal requires scrolling to see Access Key and Secret Key * Revert "upcoming: [M3-7733] - Secret Key modal requires scrolling to see Access Key and Secret Key" This reverts commit ce15f83fb44442770821f34cb95ab07e30c66a58. * Update packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md Co-authored-by: Dajahi Wiley <114682940+dwiley-akamai@users.noreply.github.com> * PR - Feedback - @DevDW --------- Co-authored-by: jdamore-linode <97627410+jdamore-linode@users.noreply.github.com> Co-authored-by: Dajahi Wiley <114682940+dwiley-akamai@users.noreply.github.com> --- ...r-10213-upcoming-features-1708540968499.md | 5 +++ .../objectStorage/access-keys.smoke.spec.ts | 2 +- .../LimitedAccessControls.tsx | 10 +++--- .../ViewPermissionsDrawer.tsx | 34 +++++++++++++++---- packages/manager/src/mocks/serverHandlers.ts | 15 ++++++++ 5 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md diff --git a/packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md b/packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md new file mode 100644 index 00000000000..abba4498a36 --- /dev/null +++ b/packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Ensure correct ARIA labels for permissions are displayed in Access Key "Permissions" drawer when OBJ Multicluster is enabled ([#10213](https://github.com/linode/manager/pull/10213)) diff --git a/packages/manager/cypress/e2e/core/objectStorage/access-keys.smoke.spec.ts b/packages/manager/cypress/e2e/core/objectStorage/access-keys.smoke.spec.ts index cc1f74b33b7..56383377eb5 100644 --- a/packages/manager/cypress/e2e/core/objectStorage/access-keys.smoke.spec.ts +++ b/packages/manager/cypress/e2e/core/objectStorage/access-keys.smoke.spec.ts @@ -394,7 +394,7 @@ describe('object storage access keys smoke tests', () => { mockBuckets.forEach((mockBucket) => { // TODO M3-7733 Update this selector when ARIA label is fixed. cy.findByLabelText( - `This token has read-only access for -${mockBucket.label}` + `This token has read-only access for ${mockRegion.id}-${mockBucket.label}` ); }); }); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx index 04d70a725cc..5a1c89814b1 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx @@ -3,10 +3,10 @@ import * as React from 'react'; import { FormControlLabel } from 'src/components/FormControlLabel'; import { Toggle } from 'src/components/Toggle/Toggle'; +import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; import { useAccountManagement } from 'src/hooks/useAccountManagement'; import { useFlags } from 'src/hooks/useFlags'; -import { TooltipIcon } from 'src/components/TooltipIcon'; import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; import { AccessTable } from './AccessTable'; @@ -52,10 +52,6 @@ export const LimitedAccessControls = React.memo((props: Props) => { return ( <> ({ - marginTop: theme.spacing(0.5), - marginBottom: theme.spacing(0.5), - })} control={ { 'Limited Access' ) } + sx={(theme) => ({ + marginBottom: theme.spacing(0.5), + marginTop: theme.spacing(0.5), + })} /> Limited access keys can list all buckets, regardless of access. They can diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/ViewPermissionsDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/ViewPermissionsDrawer.tsx index b6747755a1b..d2f37ca978a 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/ViewPermissionsDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/ViewPermissionsDrawer.tsx @@ -3,8 +3,12 @@ import * as React from 'react'; import { Drawer } from 'src/components/Drawer'; import { Typography } from 'src/components/Typography'; +import { useAccountManagement } from 'src/hooks/useAccountManagement'; +import { useFlags } from 'src/hooks/useFlags'; +import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; import { AccessTable } from './AccessTable'; +import { BucketPermissionsTable } from './BucketPermissionsTable'; export interface Props { objectStorageKey: ObjectStorageKey | null; @@ -17,6 +21,15 @@ type CombinedProps = Props; export const ViewPermissionsDrawer: React.FC = (props) => { const { objectStorageKey, onClose, open } = props; + const flags = useFlags(); + const { account } = useAccountManagement(); + + const isObjMultiClusterEnabled = isFeatureEnabled( + 'Object Storage Access Key Regions', + Boolean(flags.objMultiCluster), + account?.capabilities ?? [] + ); + if (objectStorageKey === null) { return null; } @@ -37,12 +50,21 @@ export const ViewPermissionsDrawer: React.FC = (props) => { This access key has the following permissions: - null} - /> + {isObjMultiClusterEnabled ? ( + null} + /> + ) : ( + null} + /> + )} > )} diff --git a/packages/manager/src/mocks/serverHandlers.ts b/packages/manager/src/mocks/serverHandlers.ts index dc0496d1fe3..8bae0035f00 100644 --- a/packages/manager/src/mocks/serverHandlers.ts +++ b/packages/manager/src/mocks/serverHandlers.ts @@ -1045,6 +1045,21 @@ export const handlers = [ ], }), ...objectStorageKeyFactory.buildList(1, { + bucket_access: [ + { + bucket_name: 'test007', + cluster: 'us-east-1', + permissions: 'read_only', + region: 'us-east', + }, + { + bucket_name: 'test001', + cluster: 'nl-ams-1', + permissions: 'read_write', + region: 'nl-ams', + }, + ], + limited: true, regions: [ { id: 'us-east', s3_endpoint: 'us-east.com' }, { id: 'nl-ams', s3_endpoint: 'nl-ams.com' }, From 2173f45c6738eb7ededec299cce12d144f6c5ac1 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Date: Thu, 22 Feb 2024 08:17:53 -0700 Subject: [PATCH 15/37] fix: [M3-7059] - Stop resetting count and disabling Add button when adding node pool to Kubernetes cluster (#10215) * Stop resetting plan count when node pool is added * Add changeset --- packages/manager/.changeset/pr-10215-fixed-1708555044784.md | 5 +++++ .../src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 packages/manager/.changeset/pr-10215-fixed-1708555044784.md diff --git a/packages/manager/.changeset/pr-10215-fixed-1708555044784.md b/packages/manager/.changeset/pr-10215-fixed-1708555044784.md new file mode 100644 index 00000000000..1d65574d944 --- /dev/null +++ b/packages/manager/.changeset/pr-10215-fixed-1708555044784.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +Disabled Add button once a node pool is added to kubernetes cluster in Create flow ([#10215](https://github.com/linode/manager/pull/10215)) diff --git a/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx b/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx index fab86a032fb..aab2e592cbc 100644 --- a/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx +++ b/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx @@ -73,7 +73,6 @@ const Panel: React.FunctionComponent = (props) => { id: Math.random(), type: selectedPlanType, }); - updatePlanCount(selectedPlanType, 0); setSelectedType(undefined); }; From f08b57cef5318a15e013e01c18c9adcd255dadc1 Mon Sep 17 00:00:00 2001 From: jdamore-linode <97627410+jdamore-linode@users.noreply.github.com> Date: Thu, 22 Feb 2024 12:46:25 -0500 Subject: [PATCH 16/37] =?UTF-8?q?test:=20[M3-7516]=20-=20Cypress=20tests?= =?UTF-8?q?=20for=20Parent=20=E2=86=92=20Child=20account=20switching=20flo?= =?UTF-8?q?ws=20(#10110)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add mock util to mock all APIv4 requests * Add local storage assertion util * Add mock utils for child account endpoints * Add account switching tests * Add account switching API error mock utils --------- Co-authored-by: Dajahi Wiley <114682940+dwiley-akamai@users.noreply.github.com> Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> --- .../pr-10110-tests-1706208561568.md | 5 + .../parentChild/account-switching.spec.ts | 303 ++++++++++++++++++ .../cypress/support/intercepts/account.ts | 79 +++++ .../cypress/support/intercepts/events.ts | 19 +- .../cypress/support/intercepts/general.ts | 19 ++ .../cypress/support/util/local-storage.ts | 30 ++ 6 files changed, 454 insertions(+), 1 deletion(-) create mode 100644 packages/manager/.changeset/pr-10110-tests-1706208561568.md create mode 100644 packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts create mode 100644 packages/manager/cypress/support/util/local-storage.ts diff --git a/packages/manager/.changeset/pr-10110-tests-1706208561568.md b/packages/manager/.changeset/pr-10110-tests-1706208561568.md new file mode 100644 index 00000000000..49a1409e99b --- /dev/null +++ b/packages/manager/.changeset/pr-10110-tests-1706208561568.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tests +--- + +Add Cypress tests for account switching from Parent to Child ([#10110](https://github.com/linode/manager/pull/10110)) diff --git a/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts b/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts new file mode 100644 index 00000000000..60c6488ef30 --- /dev/null +++ b/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts @@ -0,0 +1,303 @@ +import { + accountFactory, + appTokenFactory, + profileFactory, +} from '@src/factories'; +import { accountUserFactory } from '@src/factories/accountUsers'; +import { DateTime } from 'luxon'; +import { + mockCreateChildAccountToken, + mockCreateChildAccountTokenError, + mockGetAccount, + mockGetChildAccounts, + mockGetChildAccountsError, + mockGetUser, +} from 'support/intercepts/account'; +import { mockGetEvents, mockGetNotifications } from 'support/intercepts/events'; +import { + mockAppendFeatureFlags, + mockGetFeatureFlagClientstream, +} from 'support/intercepts/feature-flags'; +import { mockAllApiRequests } from 'support/intercepts/general'; +import { mockGetLinodes } from 'support/intercepts/linodes'; +import { mockGetProfile } from 'support/intercepts/profile'; +import { mockGetRegions } from 'support/intercepts/regions'; +import { ui } from 'support/ui'; +import { makeFeatureFlagData } from 'support/util/feature-flags'; +import { assertLocalStorageValue } from 'support/util/local-storage'; +import { randomLabel, randomNumber, randomString } from 'support/util/random'; + +/** + * Confirms expected username and company name are shown in user menu button and yields the button. + * + * @param username - Username to expect in user menu button. + * @param companyName - Company name to expect in user menu button. + * + * @returns Cypress chainable that yields the user menu button. + */ +const assertUserMenuButton = (username: string, companyName: string) => { + return ui.userMenuButton + .find() + .should('be.visible') + .within(() => { + cy.findByText(username).should('be.visible'); + cy.findByText(companyName).should('be.visible'); + }); +}; + +/** + * Confirms that expected authentication values are set in Local Storage. + * + * @param token - Authentication token value to assert. + * @param expiry - Authentication expiry value to assert. + * @param scopes - Authentication scope value to assert. + */ +const assertAuthLocalStorage = ( + token: string, + expiry: string, + scopes: string +) => { + assertLocalStorageValue('authentication/token', token); + assertLocalStorageValue('authentication/expire', expiry); + assertLocalStorageValue('authentication/scopes', scopes); +}; + +const mockParentAccount = accountFactory.build({ + company: 'Parent Company', +}); + +const mockParentProfile = profileFactory.build({ + username: randomLabel(), + user_type: 'parent', +}); + +const mockParentUser = accountUserFactory.build({ + username: mockParentProfile.username, + user_type: 'parent', +}); + +const mockChildAccount = accountFactory.build({ + company: 'Child Company', +}); + +const mockChildAccountToken = appTokenFactory.build({ + id: randomNumber(), + created: DateTime.now().toISO(), + expiry: DateTime.now().plus({ hours: 1 }).toISO(), + label: `${mockChildAccount.company}_proxy`, + scopes: '*', + token: randomString(32), + website: undefined, + thumbnail_url: undefined, +}); + +const mockErrorMessage = 'An unknown error has occurred.'; + +describe('Parent/Child account switching', () => { + /* + * Tests to confirm that Parent account users can switch to Child accounts as expected. + */ + describe('From Parent to Proxy', () => { + beforeEach(() => { + // @TODO M3-7554, M3-7559: Remove feature flag mocks after feature launch and clean-up. + mockAppendFeatureFlags({ + parentChildAccountAccess: makeFeatureFlagData(true), + }); + mockGetFeatureFlagClientstream(); + }); + + /* + * - Confirms that Parent account user can switch to Child account from Account Billing page. + * - Confirms that Child account information is displayed in user menu button after switch. + * - Confirms that Cloud updates local storage auth values upon account switch. + */ + it('can switch from Parent account to Child account from Billing page', () => { + mockGetProfile(mockParentProfile); + mockGetAccount(mockParentAccount); + mockGetChildAccounts([mockChildAccount]); + mockGetUser(mockParentUser); + + cy.visitWithLogin('/account/billing'); + + // Confirm that "Switch Account" button is present, then click it. + ui.button + .findByTitle('Switch Account') + .should('be.visible') + .should('be.enabled') + .click(); + + mockCreateChildAccountToken(mockChildAccount, mockChildAccountToken).as( + 'switchAccount' + ); + + ui.drawer + .findByTitle('Switch Account') + .should('be.visible') + .within(() => { + cy.findByText(mockChildAccount.company).should('be.visible').click(); + }); + + cy.wait('@switchAccount'); + + // Confirm that Cloud Manager updates local storage authentication values. + // Satisfy TypeScript using non-null assertions since we know what the mock data contains. + assertAuthLocalStorage( + mockChildAccountToken.token!, + mockChildAccountToken.expiry!, + mockChildAccountToken.scopes + ); + + // From this point forward, we will not have a valid test account token stored in local storage, + // so all non-intercepted API requests will respond with a 401 status code and we will get booted to login. + // We'll mitigate this by broadly mocking ALL API-v4 requests, then applying more specific mocks to the + // individual requests as needed. + mockAllApiRequests(); + mockGetLinodes([]); + mockGetRegions([]); + mockGetEvents([]); + mockGetNotifications([]); + + mockGetAccount(mockChildAccount); + mockGetProfile(mockParentProfile); + mockGetUser(mockParentUser); + + // TODO Remove the call to `cy.reload()` once Cloud Manager automatically updates itself upon account switching. + // TODO Add assertions for toast upon account switch. This might involve improving mocks for events/notifications. + cy.reload(); + + // Confirm expected username and company are shown in user menu button. + assertUserMenuButton( + mockParentProfile.username, + mockChildAccount.company + ); + }); + + /* + * - Confirms that Parent account user can switch to Child account using the user menu. + * - Confirms that Parent account information is initially displayed in user menu button. + * - Confirms that Child account information is displayed in user menu button after switch. + * - Confirms that Cloud updates local storage auth values upon account switch. + */ + it('can switch from Parent account to Child account using user menu', () => { + mockGetProfile(mockParentProfile); + mockGetAccount(mockParentAccount); + mockGetChildAccounts([mockChildAccount]); + mockGetUser(mockParentUser); + + cy.visitWithLogin('/'); + + // Confirm that Parent account username and company name are shown in user + // menu button, then click the button. + assertUserMenuButton( + mockParentProfile.username, + mockParentAccount.company + ).click(); + + // Click "Switch Account" button in user menu. + ui.userMenu + .find() + .should('be.visible') + .within(() => { + ui.button + .findByTitle('Switch Account') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + // Click mock company name in "Switch Account" drawer. + mockCreateChildAccountToken(mockChildAccount, mockChildAccountToken).as( + 'switchAccount' + ); + + ui.drawer + .findByTitle('Switch Account') + .should('be.visible') + .within(() => { + cy.findByText(mockChildAccount.company).should('be.visible').click(); + }); + + cy.wait('@switchAccount'); + + // Confirm that Cloud Manager updates local storage authentication values. + // Satisfy TypeScript using non-null assertions since we know what the mock data contains. + assertAuthLocalStorage( + mockChildAccountToken.token!, + mockChildAccountToken.expiry!, + mockChildAccountToken.scopes + ); + + // From this point forward, we will not have a valid test account token stored in local storage, + // so all non-intercepted API requests will respond with a 401 status code and we will get booted to login. + // We'll mitigate this by broadly mocking ALL API-v4 requests, then applying more specific mocks to the + // individual requests as needed. + mockAllApiRequests(); + mockGetLinodes([]); + mockGetRegions([]); + mockGetEvents([]); + mockGetNotifications([]); + mockGetAccount(mockChildAccount); + mockGetProfile(mockParentProfile); + mockGetUser(mockParentUser); + + // TODO Remove the call to `cy.reload()` once Cloud Manager automatically updates itself upon account switching. + // TODO Add assertions for toast upon account switch. This might involve improving mocks for events/notifications. + cy.reload(); + + // Confirm expected username and company are shown in user menu button. + assertUserMenuButton( + mockParentProfile.username, + mockChildAccount.company + ); + }); + }); + + /* + * Tests to confirm that Cloud handles account switching errors gracefully. + */ + describe('Error flows', () => { + /* + * - Confirms error handling upon failure to fetch child accounts. + * - Confirms "Try Again" button can be used to re-fetch child accounts successfully. + * - Confirms error handling upon failure to create child account token. + */ + it('handles account switching API errors', () => { + mockGetProfile(mockParentProfile); + mockGetAccount(mockParentAccount); + mockGetChildAccountsError('An unknown error has occurred', 500); + mockGetUser(mockParentUser); + + cy.visitWithLogin('/account/billing'); + ui.button + .findByTitle('Switch Account') + .should('be.visible') + .should('be.enabled') + .click(); + + ui.drawer + .findByTitle('Switch Account') + .should('be.visible') + .within(() => { + // Confirm error message upon failure to fetch child accounts. + cy.findByText('Unable to load data.').should('be.visible'); + cy.findByText( + 'Try again or contact support if the issue persists.' + ).should('be.visible'); + + // Click "Try Again" button and mock a successful response. + mockGetChildAccounts([mockChildAccount]); + ui.button + .findByTitle('Try again') + .should('be.visible') + .should('be.enabled') + .click(); + + // Click child company and mock an error. + // Confirm that Cloud Manager displays the error message in the drawer. + mockCreateChildAccountTokenError(mockChildAccount, mockErrorMessage); + cy.findByText(mockChildAccount.company).click(); + cy.findByText(mockErrorMessage).should('be.visible'); + }); + }); + }); +}); diff --git a/packages/manager/cypress/support/intercepts/account.ts b/packages/manager/cypress/support/intercepts/account.ts index 5eb29242169..27838a71068 100644 --- a/packages/manager/cypress/support/intercepts/account.ts +++ b/packages/manager/cypress/support/intercepts/account.ts @@ -20,6 +20,7 @@ import type { InvoiceItem, Payment, PaymentMethod, + Token, User, } from '@linode/api-v4'; @@ -503,6 +504,7 @@ export const mockCancelAccountError = ( /** * Intercepts GET request to fetch the account agreements and mocks the response. * + * @param agreements - Agreements with which to mock response. * * @returns Cypress chainable. */ @@ -516,9 +518,86 @@ export const mockGetAccountAgreements = ( ); }; +/** + * Intercepts GET request to fetch child accounts and mocks the response. + * + * @param childAccounts - Child account objects with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockGetChildAccounts = ( + childAccounts: Account[] +): Cypress.Chainable => { + return cy.intercept( + 'GET', + apiMatcher('account/child-accounts*'), + paginateResponse(childAccounts) + ); +}; + +/** + * Intercepts GET request to fetch child accounts and mocks an error response. + * + * @param errorMessage - API error message with which to mock response. + * @param statusCode - HTTP status code with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockGetChildAccountsError = ( + errorMessage: string = 'An unknown error has occurred', + statusCode: number = 500 +) => { + return cy.intercept( + 'GET', + apiMatcher('account/child-accounts*'), + makeErrorResponse(errorMessage, statusCode) + ); +}; + +/** + * Intercepts POST request to create a child account token and mocks the response. + * + * @param childAccount - Child account for which to create a token. + * @param childAccountToken - Token object with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockCreateChildAccountToken = ( + childAccount: Account, + childAccountToken: Token +): Cypress.Chainable => { + return cy.intercept( + 'POST', + apiMatcher(`account/child-accounts/${childAccount.euuid}/token`), + makeResponse(childAccountToken) + ); +}; + +/** + * Intercepts POST request to create a child account token and mocks error response. + * + * @param childAccount - Child account for which to mock error response. + * @param errorMessage - API error message with which to mock response. + * @param statusCode - HTTP status code with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockCreateChildAccountTokenError = ( + childAccount: Account, + errorMessage: string = 'An unknown error has occurred', + statusCode: number = 500 +): Cypress.Chainable => { + return cy.intercept( + 'POST', + apiMatcher(`account/child-accounts/${childAccount.euuid}/token`), + makeErrorResponse(errorMessage, statusCode) + ); +}; + /** * Intercepts GET request to fetch the account logins and mocks the response. * + * @param accountLogins - Account login objects with which to mock response. * * @returns Cypress chainable. */ diff --git a/packages/manager/cypress/support/intercepts/events.ts b/packages/manager/cypress/support/intercepts/events.ts index 2ae3685bd5e..eea7b5fac12 100644 --- a/packages/manager/cypress/support/intercepts/events.ts +++ b/packages/manager/cypress/support/intercepts/events.ts @@ -2,7 +2,7 @@ * @file Mocks and intercepts related to notification and event handling. */ -import { Event } from '@linode/api-v4'; +import type { Event, Notification } from '@linode/api-v4'; import { apiMatcher } from 'support/util/intercepts'; import { paginateResponse } from 'support/util/paginate'; @@ -20,3 +20,20 @@ export const mockGetEvents = (events: Event[]): Cypress.Chainable => { paginateResponse(events) ); }; + +/** + * Intercepts GET request to fetch notifications and mocks response. + * + * @param notifications - Notifications with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockGetNotifications = ( + notifications: Notification[] +): Cypress.Chainable => { + return cy.intercept( + 'GET', + apiMatcher('account/notifications*'), + paginateResponse(notifications) + ); +}; diff --git a/packages/manager/cypress/support/intercepts/general.ts b/packages/manager/cypress/support/intercepts/general.ts index 3cd13083bc5..09cd74e0167 100644 --- a/packages/manager/cypress/support/intercepts/general.ts +++ b/packages/manager/cypress/support/intercepts/general.ts @@ -2,6 +2,25 @@ import { makeErrorResponse } from 'support/util/errors'; import { apiMatcher } from 'support/util/intercepts'; import { makeResponse } from 'support/util/response'; +/** + * Intercepts all requests to Linode API v4 and mocks an HTTP response. + * + * This is useful to apply a baseline mock on all Linode API v4 requests, e.g. + * to prevent 401 responses. More fine-grained mocking can be set up with + * subsequent calls to other mock utils. + * + * @param body - Body data with which to mock response. + * @param statusCode - HTTP status code with which to mock response. + * + * @returns Cypress chainable. + */ +export const mockAllApiRequests = ( + body: any = {}, + statusCode: number = 200 +) => { + return cy.intercept(apiMatcher('**/*'), makeResponse(body, statusCode)); +}; + /** * Intercepts GET request to given URL and mocks an HTTP 200 response with the given content. * diff --git a/packages/manager/cypress/support/util/local-storage.ts b/packages/manager/cypress/support/util/local-storage.ts new file mode 100644 index 00000000000..db748cb4105 --- /dev/null +++ b/packages/manager/cypress/support/util/local-storage.ts @@ -0,0 +1,30 @@ +/** + * @file Utilities to access and validate Local Storage data. + */ + +/** + * Asserts that a local storage item has a given value. + * + * @param key - Local storage item key. + * @param value - Local storage item value to assert. + */ +export const assertLocalStorageValue = (key: string, value: any) => { + cy.getAllLocalStorage().then((localStorageData: any) => { + const origin = Cypress.config('baseUrl'); + if (!origin) { + // This should never happen in practice. + throw new Error('Unable to retrieve Cypress base URL configuration'); + } + if (!localStorageData[origin]) { + throw new Error( + `Unable to retrieve local storage data from origin '${origin}'` + ); + } + if (!localStorageData[origin][key]) { + throw new Error( + `No local storage data exists for key '${key}' and origin '${origin}'` + ); + } + expect(localStorageData[origin][key]).equals(value); + }); +}; From 232dd2ce9543ce648a123d85773d91da2e83ff3e Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Thu, 22 Feb 2024 16:27:05 -0500 Subject: [PATCH 17/37] poc: [M3-7799] - Improve Docs Site Sidebar (#10214) * initial * fixed * make links work * remove async * improvements * normalize file names more * clean up * revert unneeded change * Added changeset: Generate docs site sidebar based on folder structure * add some comments --------- Co-authored-by: Banks Nussman --- docs/.vitepress/config.ts | 13 +-- docs/.vitepress/plugins/sidebar.ts | 103 +++++++++++++----- docs/.vitepress/tsconfig.json | 6 + package.json | 2 +- .../pr-10214-tech-stories-1708552464325.md | 5 + packages/manager/tsconfig.json | 2 +- 6 files changed, 95 insertions(+), 36 deletions(-) create mode 100644 docs/.vitepress/tsconfig.json create mode 100644 packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 282a8016c1d..a52cfee08aa 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,9 +1,11 @@ -import { guides } from "./plugins/sidebar"; +import { generateSidebar } from "./plugins/sidebar"; + +export const DOCS_SRC_DIR = new URL("./../", import.meta.url).pathname; export default { title: "Cloud Manager Docs", description: "Akamai Cloud Manger Documentation", - srcDir: "./", + srcDir: DOCS_SRC_DIR, base: "/manager/", themeConfig: { logo: "/akamai-wave.svg", @@ -15,12 +17,7 @@ export default { search: { provider: "local", }, - sidebar: [ - { - text: "Development Guide", - items: guides, - }, - ], + sidebar: generateSidebar(DOCS_SRC_DIR), socialLinks: [ { icon: "github", link: "https://github.com/linode/manager" }, ], diff --git a/docs/.vitepress/plugins/sidebar.ts b/docs/.vitepress/plugins/sidebar.ts index 94152e87047..228af1d39da 100644 --- a/docs/.vitepress/plugins/sidebar.ts +++ b/docs/.vitepress/plugins/sidebar.ts @@ -1,38 +1,89 @@ -import * as fs from "fs"; -import * as path from "path"; +import { readdirSync } from "fs"; +import { join } from "path"; +import { DOCS_SRC_DIR } from "../config"; -const DEVELOPMENT_GUIDE_PATH = "./docs/development-guide"; +type LinkItem = { text: string; link: string }; -interface MarkdownInfo { - text: string; - link: string; +type SidebarItem = + | { + text: string; + collapsed?: boolean; + items: SidebarItem[] | LinkItem[]; + } + | LinkItem; + +const exclude = [ + "cache", + "public", + "PULL_REQUEST_TEMPLATE.md", + ".vitepress", + "index.md", +]; + +const replacements = [ + ["-", " "], + ["_", " "], + [".md", ""], +]; + +function isPathIgnored(path: string) { + for (const item of exclude) { + if (path.includes(item)) { + return true; + } + } + return false; +} + +function capitalize(s: string) { + return ( + s.substring(0, 1).toUpperCase() + s.substring(1, s.length).toLowerCase() + ); } /** - * Aggregates the pages in the development-guide and populates the left sidebar. + * Given a file name, this function returns a formatted title. */ -const scanDirectory = (directoryPath: string): MarkdownInfo[] => { - const markdownFiles = fs - .readdirSync(directoryPath) - .filter((file) => file.endsWith(".md")); - const markdownInfoArray: MarkdownInfo[] = []; +function formatSidebarItemText(fileName: string) { + // removes -, _, and .md from files names to generate the title + for (const [from, to] of replacements) { + fileName = fileName.replaceAll(from, to); + } + // Removes any number prefix. This allows us to order things by putting numbers in file names. + fileName = fileName.replace(/^[0-9]*/, ""); + // Capitalizes each word in the file name + fileName = fileName.split(" ").map(capitalize).join(" "); + return fileName; +} - markdownFiles.forEach((file) => { - const filePath = path.join(directoryPath, file); - const fileContent = fs.readFileSync(filePath, "utf-8"); +/** + * Generates a VitePress sidebar by recursively traversing the given directory. + */ +export function generateSidebar(dir: string) { + const files = readdirSync(dir, { withFileTypes: true }); - const titleMatch = fileContent.match(/^#\s+(.*)/m); - const title = titleMatch ? titleMatch[1] : "Untitled"; + const sidebar: SidebarItem[] = []; - const markdownInfo: MarkdownInfo = { - text: title, - link: `/development-guide/${file}`, - }; + for (const file of files) { + const filepath = join(dir, file.name); - markdownInfoArray.push(markdownInfo); - }); + if (isPathIgnored(filepath)) { + continue; + } - return markdownInfoArray; -}; + if (file.isDirectory()) { + sidebar.push({ + text: formatSidebarItemText(file.name), + collapsed: false, + items: generateSidebar(filepath), + }); + } else { + sidebar.push({ + text: formatSidebarItemText(file.name), + link: filepath.split(DOCS_SRC_DIR)[1], + }); + } + } -export const guides = scanDirectory(DEVELOPMENT_GUIDE_PATH); + return sidebar; +} diff --git a/docs/.vitepress/tsconfig.json b/docs/.vitepress/tsconfig.json new file mode 100644 index 00000000000..163fc24b10e --- /dev/null +++ b/docs/.vitepress/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "ESNext", + } +} diff --git a/package.json b/package.json index 73c02bf2854..7a34162fe1a 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "coverage": "yarn workspace linode-manager coverage", "coverage:summary": "yarn workspace linode-manager coverage:summary", "junit:summary": "ts-node scripts/junit-summary/index.ts", - "docs": "bunx vitepress@1.0.0-rc.35 dev docs" + "docs": "bunx vitepress@1.0.0-rc.44 dev docs" }, "resolutions": { "@babel/traverse": "^7.23.3", diff --git a/packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md b/packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md new file mode 100644 index 00000000000..efbd64b666f --- /dev/null +++ b/packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Generate docs site sidebar based on folder structure ([#10214](https://github.com/linode/manager/pull/10214)) diff --git a/packages/manager/tsconfig.json b/packages/manager/tsconfig.json index 3fd13c1b2eb..c1f82661284 100644 --- a/packages/manager/tsconfig.json +++ b/packages/manager/tsconfig.json @@ -45,5 +45,5 @@ "include": [ "src", "package.json" - ] + ] } From c1457a82fd84ce040abeed06f222f09a921f6641 Mon Sep 17 00:00:00 2001 From: mpolotsk-akamai <157619599+mpolotsk-akamai@users.noreply.github.com> Date: Fri, 23 Feb 2024 17:32:20 +0100 Subject: [PATCH 18/37] change: [UIE-7292] - Rename DBaaS "Scale Up" to "Resize" (#10193) * change: [UIE-7292] - update scale-up to resize * Added changeset: rename scale up to resize * change: [UIE-7292] - delete duplicated changeset * Added changeset: rename scale up to resize * change: [UIE-7292] - rename DatabaseScaleUp and all variables --- .../pr-10193-changed-1708424137596.md | 5 ++ packages/api-v4/src/account/types.ts | 2 +- .../pr-10193-changed-1708084511111.md | 5 ++ packages/manager/src/featureFlags.ts | 2 +- .../DatabaseResize.style.ts} | 4 +- .../DatabaseResize.test.tsx} | 30 ++++----- .../DatabaseResize.tsx} | 62 +++++++++---------- ...tabaseResizeCurrentConfiguration.style.ts} | 0 ...tabaseResizeCurrentConfiguration.test.tsx} | 6 +- .../DatabaseResizeCurrentConfiguration.tsx} | 4 +- .../Databases/DatabaseDetail/index.tsx | 16 ++--- .../manager/src/features/Events/constants.ts | 2 +- .../features/Events/eventMessageGenerator.ts | 11 ++-- .../components/PlansPanel/PlanContainer.tsx | 8 +-- .../components/PlansPanel/PlanSelection.tsx | 2 +- 15 files changed, 84 insertions(+), 75 deletions(-) create mode 100644 packages/api-v4/.changeset/pr-10193-changed-1708424137596.md create mode 100644 packages/manager/.changeset/pr-10193-changed-1708084511111.md rename packages/manager/src/features/Databases/DatabaseDetail/{DatabaseScaleUp/DatabaseScaleUp.style.ts => DatabaseResize/DatabaseResize.style.ts} (92%) rename packages/manager/src/features/Databases/DatabaseDetail/{DatabaseScaleUp/DatabaseScaleUp.test.tsx => DatabaseResize/DatabaseResize.test.tsx} (80%) rename packages/manager/src/features/Databases/DatabaseDetail/{DatabaseScaleUp/DatabaseScaleUp.tsx => DatabaseResize/DatabaseResize.tsx} (83%) rename packages/manager/src/features/Databases/DatabaseDetail/{DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.style.ts => DatabaseResize/DatabaseResizeCurrentConfiguration.style.ts} (100%) rename packages/manager/src/features/Databases/DatabaseDetail/{DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.test.tsx => DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx} (90%) rename packages/manager/src/features/Databases/DatabaseDetail/{DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.tsx => DatabaseResize/DatabaseResizeCurrentConfiguration.tsx} (97%) diff --git a/packages/api-v4/.changeset/pr-10193-changed-1708424137596.md b/packages/api-v4/.changeset/pr-10193-changed-1708424137596.md new file mode 100644 index 00000000000..e95d7374393 --- /dev/null +++ b/packages/api-v4/.changeset/pr-10193-changed-1708424137596.md @@ -0,0 +1,5 @@ +--- +"@linode/api-v4": Changed +--- + +rename scale up to resize ([#10193](https://github.com/linode/manager/pull/10193)) diff --git a/packages/api-v4/src/account/types.ts b/packages/api-v4/src/account/types.ts index 3800001d242..81bacfa7297 100644 --- a/packages/api-v4/src/account/types.ts +++ b/packages/api-v4/src/account/types.ts @@ -287,7 +287,7 @@ export type EventAction = | 'community_question_reply' | 'credit_card_updated' | 'database_low_disk_space' - | 'database_scale' + | 'database_resize' | 'database_backup_restore' | 'database_create' | 'database_credentials_reset' diff --git a/packages/manager/.changeset/pr-10193-changed-1708084511111.md b/packages/manager/.changeset/pr-10193-changed-1708084511111.md new file mode 100644 index 00000000000..ca143bd31df --- /dev/null +++ b/packages/manager/.changeset/pr-10193-changed-1708084511111.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Changed +--- + +rename scale up to resize ([#10193](https://github.com/linode/manager/pull/10193)) diff --git a/packages/manager/src/featureFlags.ts b/packages/manager/src/featureFlags.ts index c972cf17c3f..6e88368d995 100644 --- a/packages/manager/src/featureFlags.ts +++ b/packages/manager/src/featureFlags.ts @@ -44,7 +44,7 @@ export interface Flags { aclbFullCreateFlow: boolean; apiMaintenance: APIMaintenance; databaseBeta: boolean; - databaseScaleUp: boolean; + databaseResize: boolean; databases: boolean; firewallNodebalancer: boolean; ipv6Sharing: boolean; diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.style.ts b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.style.ts similarity index 92% rename from packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.style.ts rename to packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.style.ts index 1ffa8cd9ff5..173dfdf4c7c 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.style.ts +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.style.ts @@ -18,8 +18,8 @@ export const StyledGrid = styled(Grid, { label: 'StyledGrid' })( }) ); -export const StyledScaleUpButton = styled(Button, { - label: 'StyledScaleUpButton', +export const StyledResizeButton = styled(Button, { + label: 'StyledResizeButton', })(({ theme }) => ({ [theme.breakpoints.down('md')]: { marginRight: theme.spacing(), diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx similarity index 80% rename from packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.test.tsx rename to packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx index 20a93af8c8e..d14ab0c7775 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx @@ -13,7 +13,7 @@ import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; -import { DatabaseScaleUp } from './DatabaseScaleUp'; +import { DatabaseResize } from './DatabaseResize'; const queryClient = new QueryClient(); const loadingTestId = 'circle-progress'; @@ -23,7 +23,7 @@ afterEach(() => { queryClient.clear(); }); -describe('database scale up', () => { +describe('database resize', () => { const database = databaseFactory.build(); const dedicatedTypes = databaseTypeFactory.buildList(7, { class: 'dedicated', @@ -31,7 +31,7 @@ describe('database scale up', () => { it('should render a loading state', async () => { const { getByTestId } = renderWithTheme( - , + , { queryClient, } @@ -61,7 +61,7 @@ describe('database scale up', () => { ); const { getByTestId, getByText } = renderWithTheme( - , + , { queryClient, } @@ -101,26 +101,26 @@ describe('database scale up', () => { ); }); - it('scale up button should be disabled when no input is provided in the form', async () => { + it('resize button should be disabled when no input is provided in the form', async () => { const { getByTestId, getByText } = renderWithTheme( - , + , { queryClient, } ); await waitForElementToBeRemoved(getByTestId(loadingTestId)); expect( - getByText(/Scale Up Database Cluster/i).closest('button') + getByText(/Resize Database Cluster/i).closest('button') ).toHaveAttribute('aria-disabled', 'true'); }); - it('when a plan is selected, scale up button should be enabled and on click of it, it should show a confirmation dialog', async () => { - // Mock route history so the Plan Selection table displays prices without requiring a region in the DB scale up flow. + it('when a plan is selected, resize button should be enabled and on click of it, it should show a confirmation dialog', async () => { + // Mock route history so the Plan Selection table displays prices without requiring a region in the DB resize flow. const history = createMemoryHistory(); - history.push(`databases/${database.engine}/${database.id}/scale-up`); + history.push(`databases/${database.engine}/${database.id}/resize`); const { container, getByTestId, getByText } = renderWithTheme( - + , { queryClient, @@ -129,13 +129,13 @@ describe('database scale up', () => { await waitForElementToBeRemoved(getByTestId(loadingTestId)); const getById = queryByAttribute.bind(null, 'id'); fireEvent.click(getById(container, examplePlanType)); - const scaleUpButton = getByText(/Scale Up Database Cluster/i); - expect(scaleUpButton.closest('button')).toHaveAttribute( + const resizeButton = getByText(/Resize Database Cluster/i); + expect(resizeButton.closest('button')).toHaveAttribute( 'aria-disabled', 'false' ); - fireEvent.click(scaleUpButton); - getByText(`Scale up ${database.label}?`); + fireEvent.click(resizeButton); + getByText(`Resize ${database.label}?`); }); }); }); diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.tsx similarity index 83% rename from packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.tsx rename to packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.tsx index a6cee534055..1957bec5b23 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUp.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.tsx @@ -28,15 +28,15 @@ import { StyledGrid, StyledPlanSummarySpan, StyledPlansPanel, - StyledScaleUpButton, -} from './DatabaseScaleUp.style'; -import { DatabaseScaleUpCurrentConfiguration } from './DatabaseScaleUpCurrentConfiguration'; + StyledResizeButton, +} from './DatabaseResize.style'; +import { DatabaseResizeCurrentConfiguration } from './DatabaseResizeCurrentConfiguration'; interface Props { database: Database; } -export const DatabaseScaleUp = ({ database }: Props) => { +export const DatabaseResize = ({ database }: Props) => { const history = useHistory(); const [planSelected, setPlanSelected] = React.useState(); @@ -46,19 +46,19 @@ export const DatabaseScaleUp = ({ database }: Props) => { price: string; }>(); // This will be set to `false` once one of the configuration is selected from available plan. This is used to disable the - // "Scale up" button unless there have been changes to the form. + // "Resize" button unless there have been changes to the form. const [ shouldSubmitBeDisabled, setShouldSubmitBeDisabled, ] = React.useState(true); const [ - isScaleUpConfirmationDialogOpen, - setIsScaleUpConfirmationDialogOpen, + isResizeConfirmationDialogOpen, + setIsResizeConfirmationDialogOpen, ] = React.useState(false); const { - error: scaleUpError, + error: resizeError, isLoading: submitInProgress, mutateAsync: updateDatabase, } = useDatabaseMutation(database.engine, database.id); @@ -71,12 +71,12 @@ export const DatabaseScaleUp = ({ database }: Props) => { const { enqueueSnackbar } = useSnackbar(); - const onScaleUp = () => { + const onResize = () => { updateDatabase({ type: planSelected, }).then(() => { enqueueSnackbar( - `Your database cluster ${database.label} is being scaled up.`, + `Your database cluster ${database.label} is being resized.`, { variant: 'info', } @@ -85,12 +85,12 @@ export const DatabaseScaleUp = ({ database }: Props) => { }); }; - const scaleUpDescription = ( + const resizeDescription = ( <> - Scaling up a Database Cluster + Resize a Database Cluster - Adapt the cluster to your needs by scaling it up. Clusters cannot be - scaled down. + Adapt the cluster to your needs by resizing to a larger plan. Clusters + cannot be resized to smaller plans. > ); @@ -121,21 +121,21 @@ export const DatabaseScaleUp = ({ database }: Props) => { setIsScaleUpConfirmationDialogOpen(false), + onClick: () => setIsResizeConfirmationDialogOpen(false), }} /> ); const costSummary = ( - {`The cost of the scaled-up database is ${summaryText?.price}.`} + {`The cost of the resized database is ${summaryText?.price}.`} ); const confirmationPopUpMessage = @@ -143,7 +143,7 @@ export const DatabaseScaleUp = ({ database }: Props) => { <> {costSummary} - {`Warning: This operation will cause downtime for your upscaled node cluster.`} + {`Warning: This operation will cause downtime for your resized node cluster.`} > ) : ( @@ -228,7 +228,7 @@ export const DatabaseScaleUp = ({ database }: Props) => { // We don't have a "Nanodes" tab anymore, so use `shared` const selectedTypeClass = currentPlanClass === 'nanode' ? 'standard' : currentPlanClass; - // User cannot switch to different plan type apart from current plan while scaling up a DB cluster. So disable rest of the tabs. + // User cannot switch to different plan type apart from current plan while resizing a DB cluster. So disable rest of the tabs. const tabsToBeDisabled = typeClasses .filter((typeClass) => typeClass !== selectedTypeClass) .map((plan) => (plan === 'standard' ? 'shared' : plan)); @@ -242,15 +242,15 @@ export const DatabaseScaleUp = ({ database }: Props) => { return ( <> - {scaleUpDescription} + {resizeDescription} - + { {summaryPanel} - { - setIsScaleUpConfirmationDialogOpen(true); + setIsResizeConfirmationDialogOpen(true); }} buttonType="primary" disabled={shouldSubmitBeDisabled} type="submit" > - Scale Up Database Cluster - + Resize Database Cluster + setIsScaleUpConfirmationDialogOpen(false)} - open={isScaleUpConfirmationDialogOpen} - title={`Scale up ${database.label}?`} + error={resizeError?.[0].reason} + onClose={() => setIsResizeConfirmationDialogOpen(false)} + open={isResizeConfirmationDialogOpen} + title={`Resize ${database.label}?`} > {confirmationPopUpMessage} diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.style.ts b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.style.ts similarity index 100% rename from packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.style.ts rename to packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.style.ts diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx similarity index 90% rename from packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.test.tsx rename to packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx index 89f705623d8..6d41b67a3ea 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx @@ -7,7 +7,7 @@ import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; -import { DatabaseScaleUpCurrentConfiguration } from './DatabaseScaleUpCurrentConfiguration'; +import { DatabaseResizeCurrentConfiguration } from './DatabaseResizeCurrentConfiguration'; const queryClient = new QueryClient(); const loadingTestId = 'circle-progress'; @@ -21,7 +21,7 @@ describe('database current configuration section', () => { const database = databaseFactory.build(); it('should render a loading state', async () => { const { getByTestId } = renderWithTheme( - , + , { queryClient, } @@ -54,7 +54,7 @@ describe('database current configuration section', () => { ); const { getByTestId, getByText } = renderWithTheme( - , + , { queryClient, } diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.tsx similarity index 97% rename from packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.tsx rename to packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.tsx index 1fea3ed69b2..ba01bb75260 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseScaleUp/DatabaseScaleUpCurrentConfiguration.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.tsx @@ -22,7 +22,7 @@ import { StyledSummaryTextBox, StyledSummaryTextTypography, StyledTitleTypography, -} from './DatabaseScaleUpCurrentConfiguration.style'; +} from './DatabaseResizeCurrentConfiguration.style'; interface Props { database: Database; @@ -32,7 +32,7 @@ export const getDatabaseVersionNumber = ( version: DatabaseInstance['version'] ) => version.split('/')[1]; -export const DatabaseScaleUpCurrentConfiguration = ({ database }: Props) => { +export const DatabaseResizeCurrentConfiguration = ({ database }: Props) => { const { data: types, error: typesError, diff --git a/packages/manager/src/features/Databases/DatabaseDetail/index.tsx b/packages/manager/src/features/Databases/DatabaseDetail/index.tsx index 449002010a0..77300fc74ce 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/index.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/index.tsx @@ -23,9 +23,9 @@ import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; const DatabaseSummary = React.lazy(() => import('./DatabaseSummary')); const DatabaseBackups = React.lazy(() => import('./DatabaseBackups')); const DatabaseSettings = React.lazy(() => import('./DatabaseSettings')); -const DatabaseScaleUp = React.lazy(() => - import('./DatabaseScaleUp/DatabaseScaleUp').then(({ DatabaseScaleUp }) => ({ - default: DatabaseScaleUp, +const DatabaseResize = React.lazy(() => + import('./DatabaseResize/DatabaseResize').then(({ DatabaseResize }) => ({ + default: DatabaseResize, })) ); @@ -84,10 +84,10 @@ export const DatabaseDetail = () => { }, ]; - if (flags.databaseScaleUp) { + if (flags.databaseResize) { tabs.push({ - routeName: `/databases/${engine}/${id}/scale-up`, - title: 'Scale Up', + routeName: `/databases/${engine}/${id}/resize`, + title: 'Resize', }); } @@ -164,9 +164,9 @@ export const DatabaseDetail = () => { - {flags.databaseScaleUp ? ( + {flags.databaseResize ? ( - + ) : null} diff --git a/packages/manager/src/features/Events/constants.ts b/packages/manager/src/features/Events/constants.ts index 800a6bb2786..57f3d58ec62 100644 --- a/packages/manager/src/features/Events/constants.ts +++ b/packages/manager/src/features/Events/constants.ts @@ -16,7 +16,7 @@ export const EVENT_ACTIONS: Event['action'][] = [ 'database_delete', 'database_update_failed', 'database_update', - 'database_scale', + 'database_resize', 'disk_create', 'disk_delete', 'disk_duplicate', diff --git a/packages/manager/src/features/Events/eventMessageGenerator.ts b/packages/manager/src/features/Events/eventMessageGenerator.ts index 3e1f12d73ff..d2c3c1e73cd 100644 --- a/packages/manager/src/features/Events/eventMessageGenerator.ts +++ b/packages/manager/src/features/Events/eventMessageGenerator.ts @@ -122,12 +122,11 @@ export const eventMessageCreators: { [index: string]: CreatorsForStatus } = { `Low disk space alert for database ${e.entity!.label} has cleared.`, notification: (e) => `Database ${e.entity!.label} has low disk space.`, }, - database_scale: { - failed: (e) => `Database ${e.entity!.label} could not be scaled up.`, - finished: (e) => `Database ${e.entity!.label} has been scaled up.`, - scheduled: (e) => - `Database ${e.entity!.label} is scheduled for scaling up.`, - started: (e) => `Database ${e.entity!.label} is scaling up.`, + database_resize: { + failed: (e) => `Database ${e.entity!.label} could not be resized.`, + finished: (e) => `Database ${e.entity!.label} has been resized.`, + scheduled: (e) => `Database ${e.entity!.label} is scheduled for resizing.`, + started: (e) => `Database ${e.entity!.label} is resizing.`, }, database_update: { finished: (e) => `Database ${e.entity!.label} has been updated.`, diff --git a/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx b/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx index d5dc3b34a96..c200d51fd0f 100644 --- a/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx +++ b/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx @@ -82,13 +82,13 @@ export const PlanContainer = (props: Props) => { const shouldShowNetwork = showTransfer && plans.some((plan: ExtendedType) => plan.network_out); - // DC Dynamic price logic - DB creation and DB scale up flows are currently out of scope + // DC Dynamic price logic - DB creation and DB resize flows are currently out of scope const isDatabaseCreateFlow = location.pathname.includes('/databases/create'); - const isDatabaseScaleUpFlow = - location.pathname.match(/\/databases\/.*\/(\d+\/scale-up)/)?.[0] === + const isDatabaseResizeFlow = + location.pathname.match(/\/databases\/.*\/(\d+\/resize)/)?.[0] === location.pathname; const shouldDisplayNoRegionSelectedMessage = - !selectedRegionId && !isDatabaseCreateFlow && !isDatabaseScaleUpFlow; + !selectedRegionId && !isDatabaseCreateFlow && !isDatabaseResizeFlow; const renderPlanSelection = React.useCallback(() => { return plans.map((plan, id) => { diff --git a/packages/manager/src/features/components/PlansPanel/PlanSelection.tsx b/packages/manager/src/features/components/PlansPanel/PlanSelection.tsx index 6989ac30063..1b44a7f47ae 100644 --- a/packages/manager/src/features/components/PlansPanel/PlanSelection.tsx +++ b/packages/manager/src/features/components/PlansPanel/PlanSelection.tsx @@ -89,7 +89,7 @@ export const PlanSelection = (props: PlanSelectionProps) => { ? `${type.formattedLabel} this plan is too small for resize` : type.formattedLabel; - // DC Dynamic price logic - DB creation and DB scale up flows are currently out of scope + // DC Dynamic price logic - DB creation and DB resize flows are currently out of scope const isDatabaseFlow = location.pathname.includes('/databases'); const price: PriceObject | undefined = !isDatabaseFlow ? getLinodeRegionPrice(type, selectedRegionId) From cbd2e1af0b0932154d75c344612c6e9a4b576419 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Fri, 23 Feb 2024 12:18:24 -0500 Subject: [PATCH 19/37] change: [M3-7802] - Remove API caching (#10219) * remove prebuild caching * fix region select bug and other unit tests * more fixes * Fix PlacementGroupsDeleteModal test * Added changeset: Remove build time API caching --------- Co-authored-by: Banks Nussman Co-authored-by: Alban Bailly --- packages/api-v4/src/linodes/types.ts | 5 +- .../pr-10219-tech-stories-1708637715379.md | 5 ++ packages/manager/package.json | 2 +- packages/manager/scripts/prebuild.mjs | 89 ------------------- packages/manager/src/cachedData/kernels.json | 1 - .../manager/src/cachedData/marketplace.json | 1 - packages/manager/src/cachedData/regions.json | 1 - .../manager/src/cachedData/typesLegacy.json | 1 - .../components/RegionSelect/RegionSelect.tsx | 2 +- packages/manager/src/factories/kernels.ts | 13 +++ .../ClusterList/KubernetesClusterRow.test.tsx | 20 ++++- .../LinodeSettings/KernelSelect.test.tsx | 28 +++--- .../PlacementGroupsCreateDrawer.test.tsx | 22 ++++- .../PlacementGroupsDeleteModal.test.tsx | 51 ++++++++--- .../PlacementGroupsRenameDrawer.test.tsx | 22 ++++- packages/manager/src/queries/regions.ts | 3 - packages/manager/src/queries/stackscripts.ts | 2 - 17 files changed, 137 insertions(+), 131 deletions(-) create mode 100644 packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md delete mode 100644 packages/manager/scripts/prebuild.mjs delete mode 100644 packages/manager/src/cachedData/kernels.json delete mode 100644 packages/manager/src/cachedData/marketplace.json delete mode 100644 packages/manager/src/cachedData/regions.json delete mode 100644 packages/manager/src/cachedData/typesLegacy.json create mode 100644 packages/manager/src/factories/kernels.ts diff --git a/packages/api-v4/src/linodes/types.ts b/packages/api-v4/src/linodes/types.ts index 085dc6f722d..f8c1abe5ee2 100644 --- a/packages/api-v4/src/linodes/types.ts +++ b/packages/api-v4/src/linodes/types.ts @@ -232,10 +232,13 @@ export interface Kernel { label: string; version: string; kvm: boolean; - xen: boolean; architecture: KernelArchitecture; pvops: boolean; deprecated: boolean; + /** + * @example 2009-10-26T04:00:00 + */ + built: string; } export interface NetStats { diff --git a/packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md b/packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md new file mode 100644 index 00000000000..8d5f727239d --- /dev/null +++ b/packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Remove build time API caching ([#10219](https://github.com/linode/manager/pull/10219)) diff --git a/packages/manager/package.json b/packages/manager/package.json index f8d35bb819a..d34a381a11a 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -83,7 +83,7 @@ "start:expose": "concurrently --raw \"vite --host\" \"tsc --watch --preserveWatchOutput\"", "start:ci": "yarn serve ./build -p 3000 -s --cors", "lint": "yarn run eslint . --ext .js,.ts,.tsx --quiet", - "build": "node scripts/prebuild.mjs && vite build", + "build": "vite build", "build:analyze": "bunx vite-bundle-visualizer", "precommit": "lint-staged && yarn typecheck", "test": "vitest run", diff --git a/packages/manager/scripts/prebuild.mjs b/packages/manager/scripts/prebuild.mjs deleted file mode 100644 index eb5461cf866..00000000000 --- a/packages/manager/scripts/prebuild.mjs +++ /dev/null @@ -1,89 +0,0 @@ -/** - * This Node script is run during our build process. - * These endpoints are extremely unlikely to change between - * Cloud releases, so by including these requests in our build - * pipeline and reading them as if they were hard coded from the app, - * we can prevent unnecessary network requests. - */ -import { writeFileSync } from 'fs'; - -// Always use prod API rather than the variable in /src/constants -const API_ROOT = 'https://api.linode.com/v4/'; -const DATA_DIR = 'src/cachedData/'; -const cachedRequests = [ - { - endpoint: 'regions', - filename: 'regions.json', - }, - { - endpoint: 'linode/types-legacy', - filename: 'typesLegacy.json', - }, - // Only used for testing purposes, never for displaying data to users - { - endpoint: 'linode/kernels', - filename: 'kernels.json', - }, - { - endpoint: 'linode/stackscripts', - filename: 'marketplace.json', - filter: [ - { - '+and': [ - { - '+or': [ - { username: 'linode-stackscripts' }, - { username: 'linode' }, - ], - }, - { - label: { - '+contains': 'One-Click', - }, - }, - ], - }, - { '+order_by': 'ordinal' }, - ], - }, -]; - -async function handleRequest(endpoint, filename, filter) { - const response = await fetch(API_ROOT + endpoint + '?page_size=500', { - headers: filter ? { 'x-filter': JSON.stringify(filter) } : {}, - }); - const data = await response.json(); - - if (data.data.pages > 1) { - throw new Error( - `Request ${endpoint} has many pages but we only support caching 1 page.` - ); - } - - writeFileSync(`${DATA_DIR}${filename}`, JSON.stringify(data)); - - console.log( - `Cached endpoint ${API_ROOT + endpoint} to ${DATA_DIR}${filename}` - ); -} - -async function prebuild() { - /** - * Request /types, /types-legacy and /regions and store the values - * as hard-coded JSON to save network requests on load - */ - console.log('Caching common requests'); - - const requests = cachedRequests.map((request) => - handleRequest(request.endpoint, request.filename, request.filter) - ); - - try { - await Promise.all(requests); - console.log('Caching successful'); - } catch (error) { - console.error('Caching failed', error); - } -} - -prebuild(); diff --git a/packages/manager/src/cachedData/kernels.json b/packages/manager/src/cachedData/kernels.json deleted file mode 100644 index 211aca02bdf..00000000000 --- a/packages/manager/src/cachedData/kernels.json +++ /dev/null @@ -1 +0,0 @@ -{"data":[{"id":"linode/latest-2.6-32bit","label":"Latest 2.6 (2.6.39.1-linode34)","version":"2.6.39","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2009-10-26T04:00:00"},{"id":"linode/latest-2.6","label":"Latest 2.6 Stable (2.6.23.17-linode44)","version":"2.6.24","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2009-08-17T04:00:00"},{"id":"linode/latest-32bit","label":"Latest 32 bit (6.2.9-x86-linode180)","version":"6.2.9","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2023-04-05T19:23:04"},{"id":"linode/2.6.18.8-linode22","label":"Latest Legacy (2.6.18.8-linode22)","version":"2.6.18","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2006-06-25T04:00:00"},{"id":"linode/6.4.9-x86_64-linode162","label":"6.4.9-x86_64-linode162","version":"6.4.9","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2023-08-09T19:47:08"},{"id":"linode/6.4.9-x86-linode182","label":"6.4.9-x86-linode182","version":"6.4.9","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2023-08-09T19:39:15"},{"id":"linode/6.3.5-x86_64-linode161","label":"6.3.5-x86_64-linode161","version":"6.3.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2023-05-31T16:28:44"},{"id":"linode/6.3.5-x86-linode181","label":"6.3.5-x86-linode181","version":"6.3.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2023-05-31T16:21:49"},{"id":"linode/6.2.9-x86_64-linode160","label":"6.2.9-x86_64-linode160","version":"6.2.9","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2023-04-05T19:30:32"},{"id":"linode/6.2.9-x86-linode180","label":"6.2.9-x86-linode180","version":"6.2.9","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2023-04-05T19:23:04"},{"id":"linode/6.1.10-x86_64-linode159","label":"6.1.10-x86_64-linode159","version":"6.1.10","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2023-02-08T19:14:45"},{"id":"linode/6.1.10-x86-linode179","label":"6.1.10-x86-linode179","version":"6.1.10","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2023-02-08T19:07:56"},{"id":"linode/6.0.10-x86_64-linode158","label":"6.0.10-x86_64-linode158","version":"6.0.10","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-12-01T18:16:43"},{"id":"linode/6.0.10-x86-linode178","label":"6.0.10-x86-linode178","version":"6.0.10","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-12-01T18:09:33"},{"id":"linode/6.0.2-x86_64-linode157","label":"6.0.2-x86_64-linode157","version":"6.0.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-10-17T17:01:41"},{"id":"linode/6.0.2-x86-linode177","label":"6.0.2-x86-linode177","version":"6.0.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-10-17T16:54:28"},{"id":"linode/5.19.2-x86_64-linode156","label":"5.19.2-x86_64-linode156","version":"5.19.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-08-18T19:51:13"},{"id":"linode/5.19.2-x86-linode176","label":"5.19.2-x86-linode176","version":"5.19.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-08-18T19:44:26"},{"id":"linode/5.18.2-x86_64-linode155","label":"5.18.2-x86_64-linode155","version":"5.18.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-06-07T14:46:11"},{"id":"linode/5.18.2-x86-linode175","label":"5.18.2-x86-linode175","version":"5.18.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-06-07T14:39:32"},{"id":"linode/5.17.5-x86_64-linode154","label":"5.17.5-x86_64-linode154","version":"5.17.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-05-02T19:07:22"},{"id":"linode/5.17.5-x86-linode174","label":"5.17.5-x86-linode174","version":"5.17.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-05-02T19:00:48"},{"id":"linode/5.16.13-x86-linode173","label":"5.16.13-x86-linode173","version":"5.16.13","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-03-08T19:09:29"},{"id":"linode/5.16.13-x86_64-linode153","label":"5.16.13-x86_64-linode153","version":"5.16.13","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-03-08T19:16:05"},{"id":"linode/5.16.3-x86_64-linode152","label":"5.16.3-x86_64-linode152","version":"5.16.3","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2022-01-27T19:46:44"},{"id":"linode/5.16.3-x86-linode172","label":"5.16.3-x86-linode172","version":"5.16.3","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2022-01-27T19:40:10"},{"id":"linode/5.15.10-x86_64-linode151","label":"5.15.10-x86_64-linode151","version":"5.15.10","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2021-12-21T18:44:00"},{"id":"linode/5.15.10-x86-linode171","label":"5.15.10-x86-linode171","version":"5.15.10","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2021-12-21T18:37:00"},{"id":"linode/5.14.17-x86_64-linode150","label":"5.14.17-x86_64-linode150","version":"5.14.17","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-11-11T18:23:00"},{"id":"linode/5.14.17-x86-linode170","label":"5.14.17-x86-linode170","version":"5.14.17","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-11-11T18:17:00"},{"id":"linode/5.14.15-x86_64-linode149","label":"5.14.15-x86_64-linode149","version":"5.14.15","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-11-01T18:02:00"},{"id":"linode/5.14.15-x86-linode169","label":"5.14.15-x86-linode169","version":"5.14.15","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-11-01T17:55:00"},{"id":"linode/5.14.14-x86_64-linode148","label":"5.14.14-x86_64-linode148","version":"5.14.14","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-10-20T18:22:00"},{"id":"linode/5.14.14-x86-linode168","label":"5.14.14-x86-linode168","version":"5.14.14","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-10-20T18:15:00"},{"id":"linode/5.14.2-x86_64-linode147","label":"5.14.2-x86_64-linode147","version":"5.14.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-09-08T19:06:00"},{"id":"linode/5.14.2-x86-linode167","label":"5.14.2-x86-linode167","version":"5.14.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-09-08T19:00:00"},{"id":"linode/5.13.4-x86_64-linode146","label":"5.13.4-x86_64-linode146","version":"5.13.4","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-07-21T18:51:00"},{"id":"linode/5.13.4-x86-linode166","label":"5.13.4-x86-linode166","version":"5.13.4","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-07-21T18:45:00"},{"id":"linode/5.12.13-x86_64-linode145","label":"5.12.13-x86_64-linode145","version":"5.12.13","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-06-24T20:24:00"},{"id":"linode/5.12.13-x86-linode165","label":"5.12.13-x86-linode165","version":"5.12.13","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-06-24T20:19:00"},{"id":"linode/5.12.2-x86_64-linode144","label":"5.12.2-x86_64-linode144","version":"5.12.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-05-10T17:16:00"},{"id":"linode/5.12.2-x86-linode164","label":"5.12.2-x86-linode164","version":"5.12.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-05-10T17:10:00"},{"id":"linode/5.11.13-x86_64-linode143","label":"5.11.13-x86_64-linode143","version":"5.11.13","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-04-13T15:46:00"},{"id":"linode/5.11.13-x86-linode163","label":"5.11.13-x86-linode163","version":"5.11.13","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-04-13T15:40:00"},{"id":"linode/5.11.9-x86_64-linode142","label":"5.11.9-x86_64-linode142","version":"5.11.9","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2021-03-24T15:33:00"},{"id":"linode/5.11.9-x86-linode162","label":"5.11.9-x86-linode162","version":"5.11.9","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2021-03-24T15:28:00"},{"id":"linode/5.10.13-x86_64-linode141","label":"5.10.13-x86_64-linode141","version":"5.10.13","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2021-02-04T19:02:00"},{"id":"linode/5.10.13-x86-linode161","label":"5.10.13-x86-linode161","version":"5.10.13","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2021-02-04T18:56:00"},{"id":"linode/5.10.2-x86_64-linode140","label":"5.10.2-x86_64-linode140","version":"5.10.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-12-22T20:43:00"},{"id":"linode/5.10.2-x86-linode160","label":"5.10.2-x86-linode160","version":"5.10.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-12-22T20:38:00"},{"id":"linode/5.9.6-x86_64-linode139","label":"5.9.6-x86_64-linode139","version":"5.9.6","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-11-05T19:51:00"},{"id":"linode/5.9.6-x86-linode159","label":"5.9.6-x86-linode159","version":"5.9.6","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-11-05T19:45:00"},{"id":"linode/5.8.10-x86-linode158","label":"5.8.10-x86-linode158","version":"5.8.10","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-09-17T19:58:00"},{"id":"linode/5.8.10-x86_64-linode138","label":"5.8.10-x86_64-linode138","version":"5.8.10","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-09-17T20:03:00"},{"id":"linode/5.8.3-x86_64-linode137","label":"5.8.3-x86_64-linode137","version":"5.8.3","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-08-24T18:55:00"},{"id":"linode/5.8.3-x86-linode157","label":"5.8.3-x86-linode157","version":"5.8.3","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-08-24T18:50:00"},{"id":"linode/5.7.6-x86-linode156","label":"5.7.6-x86-linode156","version":"5.7.6","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-06-25T16:41:08"},{"id":"linode/5.6.14-x86-linode155","label":"5.6.14-x86-linode155","version":"5.6.14","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-06-01T14:05:47"},{"id":"linode/5.6.1-x86-linode154","label":"5.6.1-x86-linode154","version":"5.6.1","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2020-04-07T21:29:12"},{"id":"linode/5.4.10-x86-linode152","label":"5.4.10-x86-linode152","version":"5.4.10","kvm":true,"architecture":"i386","pvops":true,"deprecated":false,"built":"2020-01-10T21:02:10"},{"id":"linode/5.3.11-x86-linode151","label":"5.3.11-x86-linode151","version":"5.3.11","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-11-14T20:38:53"},{"id":"linode/5.3.7-x86-linode150","label":"5.3.7-x86-linode150","version":"5.3.7","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-10-30T21:10:08"},{"id":"linode/5.2.9-x86-linode149","label":"5.2.9-x86-linode149","version":"5.2.9","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-08-21T18:48:52"},{"id":"linode/5.1.17-x86-linode148","label":"5.1.17-x86-linode148","version":"5.1.17","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-07-16T15:25:35"},{"id":"linode/5.1.11-x86-linode147","label":"5.1.11-x86-linode147","version":"5.1.11","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-06-17T22:46:37"},{"id":"linode/5.1.5-x86-linode146","label":"5.1.5-x86-linode146","version":"5.1.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-05-30T20:30:37"},{"id":"linode/4.14.120-x86-linode145","label":"4.14.120-x86-linode145","version":"4.14.120","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-05-21T10:57:13"},{"id":"linode/5.1.2-x86-linode144","label":"5.1.2-x86-linode144","version":"5.1.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-05-15T16:13:49"},{"id":"linode/5.0.8-x86-linode143","label":"5.0.8-x86-linode143","version":"5.0.8","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-04-17T18:39:29"},{"id":"linode/4.20.4-x86-linode141","label":"4.20.4-x86-linode141","version":"4.20.4","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2019-01-25T19:13:27"},{"id":"linode/4.19.8-x86-linode140","label":"4.19.8-x86-linode140","version":"4.19.8","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-12-12T21:44:08"},{"id":"linode/4.19.5-x86-linode139","label":"4.19.5-x86-linode139","version":"4.19.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-11-29T16:36:09"},{"id":"linode/4.18.16-x86-linode138","label":"4.18.16-x86-linode138","version":"4.18.16","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-10-29T20:24:50"},{"id":"linode/4.18.8-x86-linode137","label":"4.18.8-x86-linode137","version":"4.18.8","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-10-04T18:06:19"},{"id":"linode/4.18.8-x86-linode136","label":"4.18.8-x86-linode136","version":"4.18.8","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-09-19T12:54:57"},{"id":"linode/4.17.17-x86-linode135","label":"4.17.17-x86-linode135","version":"4.17.17","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-08-20T17:24:09"},{"id":"linode/4.17.15-x86-linode134","label":"4.17.15-x86-linode134","version":"4.17.15","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-08-16T17:13:56"},{"id":"linode/4.17.14-x86-linode133","label":"4.17.14-x86-linode133","version":"4.17.14","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-08-13T16:40:31"},{"id":"linode/4.17.14-x86-linode132","label":"4.17.14-x86-linode132","version":"4.17.14","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-08-10T21:08:51"},{"id":"linode/4.17.12-x86-linode131","label":"4.17.12-x86-linode131","version":"4.17.12","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-08-07T13:01:28"},{"id":"linode/4.17.11-x86-linode130","label":"4.17.11-x86-linode130","version":"4.17.11","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-07-31T19:51:00"},{"id":"linode/4.17.8-x86-linode129","label":"4.17.8-x86-linode129","version":"4.17.8","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-07-18T17:17:29"},{"id":"linode/4.17.2-x86-linode128","label":"4.17.2-x86-linode128","version":"4.17.2","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-06-26T19:42:55"},{"id":"linode/4.16.11-x86-linode127","label":"4.16.11-x86-linode127","version":"4.16.11","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-05-24T21:33:29"},{"id":"linode/4.15.18-x86-linode126","label":"4.15.18-x86-linode126","version":"4.15.18","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-05-02T20:21:02"},{"id":"linode/4.15.13-x86-linode125","label":"4.15.13-x86-linode125","version":"4.15.13","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-03-27T17:17:56"},{"id":"linode/4.15.12-x86-linode124","label":"4.15.12-x86-linode124","version":"4.15.12","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-03-22T20:09:16"},{"id":"linode/4.15.10-x86-linode123","label":"4.15.10-x86-linode123","version":"4.15.10","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-03-16T21:18:40"},{"id":"linode/4.15.8-x86-linode122","label":"4.15.8-x86-linode122","version":"4.15.8","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-03-10T21:25:42"},{"id":"linode/4.15.7-x86-linode121","label":"4.15.7-x86-linode121","version":"4.15.7","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-03-01T17:20:09"},{"id":"linode/4.14.19-x86-linode119","label":"4.14.19-x86-linode119","version":"4.14.19","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-02-13T19:05:44"},{"id":"linode/4.14.17-x86-linode118","label":"4.14.17-x86-linode118","version":"4.14.17","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-02-08T18:34:40"},{"id":"linode/4.9.80-x86-linode117","label":"4.9.80-x86-linode117","version":"4.9.80","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-02-08T18:33:46"},{"id":"linode/4.4.115-x86-linode116","label":"4.4.115-x86-linode116","version":"4.4.115","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-02-08T18:32:57"},{"id":"linode/4.4.113-x86-linode115","label":"4.4.113-x86-linode115","version":"4.4.113","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-01-25T22:47:11"},{"id":"linode/4.9.78-x86-linode114","label":"4.9.78-x86-linode114","version":"4.9.78","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-01-23T23:23:58"},{"id":"linode/4.14.14-x86-linode113","label":"4.14.14-x86-linode113","version":"4.14.14","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-01-23T02:00:02"},{"id":"linode/4.14.14-x86-linode112","label":"4.14.14-x86-linode112","version":"4.14.14","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-01-18T20:09:53"},{"id":"linode/4.9.64-x86-linode107","label":"4.9.64-x86-linode107","version":"4.9.64","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-12-01T23:10:11"},{"id":"linode/4.9.68-x86-linode108","label":"4.9.68-x86-linode108","version":"4.9.68","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-12-11T19:00:15"},{"id":"linode/4.14.12-x86-linode111","label":"4.14.12-x86-linode111","version":"4.14.12","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-01-05T16:31:55"},{"id":"linode/4.14.11-x86-linode110","label":"4.14.11-x86-linode110","version":"4.14.11","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2018-01-04T18:56:25"},{"id":"linode/4.9.56-x86-linode106","label":"4.9.56-x86-linode106","version":"4.9.56","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-10-13T21:10:23"},{"id":"linode/4.9.50-x86-linode105","label":"4.9.50-x86-linode105","version":"4.9.50","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-09-14T21:46:56"},{"id":"linode/4.9.36-x86-linode104","label":"4.9.36-x86-linode104","version":"4.9.36","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-07-10T13:16:53"},{"id":"linode/4.9.33-x86-linode102","label":"4.9.33-x86-linode102","version":"4.9.33","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-06-23T22:06:05"},{"id":"linode/4.9.15-x86-linode100","label":"4.9.15-x86-linode100","version":"4.9.15","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-03-22T13:48:13"},{"id":"linode/4.9.7-x86-linode99","label":"4.9.7-x86-linode99","version":"4.9.7","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2017-02-03T22:54:57"},{"id":"linode/4.9.0-x86-linode98","label":"4.9.0-x86-linode98","version":"4.9.0","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-12-13T20:10:20"},{"id":"linode/4.8.6-x86-linode97","label":"4.8.6-x86-linode97","version":"4.8.6","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-11-02T15:23:43"},{"id":"linode/4.8.4-x86-linode96","label":"4.8.4-x86-linode96","version":"4.8.4","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-10-27T18:51:41"},{"id":"linode/4.8.3-x86-linode95","label":"4.8.3-x86-linode95","version":"4.8.3","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-10-20T23:10:27"},{"id":"linode/4.8.1-x86-linode94","label":"4.8.1-x86-linode94","version":"4.8.1","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-10-07T22:21:55"},{"id":"linode/4.7.3-x86-linode92","label":"4.7.3-x86-linode92","version":"4.7.3","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-09-15T13:13:40"},{"id":"linode/4.7.0-x86-linode90","label":"4.7.0-x86-linode90","version":"4.7.0","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-08-05T14:35:48"},{"id":"linode/4.6.5-x86-linode89","label":"4.6.5-x86-linode89","version":"4.6.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-08-04T15:28:59"},{"id":"linode/4.5.5-x86-linode88","label":"4.5.5-x86-linode88","version":"4.5.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-05-24T15:29:02"},{"id":"linode/4.5.3-x86-linode86","label":"4.5.3-x86-linode86","version":"4.5.3","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-05-10T19:39:51"},{"id":"linode/4.5.0-x86-linode84","label":"4.5.0-x86-linode84","version":"4.5.0","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-03-16T18:53:02"},{"id":"linode/4.4.4-x86-linode83","label":"4.4.4-x86-linode83","version":"4.4.4","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-03-10T22:20:19"},{"id":"linode/4.4.0-x86-linode82","label":"4.4.0-x86-linode82","version":"4.4.0","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2016-01-20T14:41:05"},{"id":"linode/4.1.5-x86-linode80","label":"4.1.5-x86-linode80","version":"4.1.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-08-24T19:00:43"},{"id":"linode/4.1.5-x86-linode79","label":"4.1.5-x86-linode79","version":"4.1.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-08-13T13:00:00"},{"id":"linode/4.1.0-x86-linode78","label":"4.1.0-x86-linode78","version":"4.1.0","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-06-22T15:19:32"},{"id":"linode/4.0.5-x86-linode77","label":"4.0.5-x86-linode77","version":"4.0.5","kvm":true,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-06-11T13:58:18"},{"id":"linode/4.0.5-x86-linode76","label":"4.0.5-x86-linode76","version":"4.0.5","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-06-10T15:31:52"},{"id":"linode/4.0.4-x86-linode75","label":"4.0.4-x86-linode75","version":"4.0.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-05-21T15:15:47"},{"id":"linode/4.0.2-x86-linode74","label":"4.0.2-x86-linode74","version":"4.0.2","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-05-11T20:56:58"},{"id":"linode/4.0-x86-linode73","label":"4.0.1-x86-linode73","version":"4.0.1","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-05-04T13:43:23"},{"id":"linode/4.0-x86-linode72","label":"4.0-x86-linode72","version":"4.0","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-04-21T13:02:24"},{"id":"linode/3.19.1-x86-linode71","label":"3.19.1-x86-linode71","version":"3.19.1","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-03-11T18:00:36"},{"id":"linode/3.18.5-x86-linode70","label":"3.18.5-x86-linode70","version":"3.18.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-02-05T05:00:00"},{"id":"linode/3.18.3-x86-linode69","label":"3.18.3-x86-linode69","version":"3.18.3","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-01-23T15:12:45"},{"id":"linode/3.18.1-x86-linode68","label":"3.18.1-x86-linode68","version":"3.18.1","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2015-01-06T17:32:39"},{"id":"linode/3.16.7-x86-linode67","label":"3.16.7-x86-linode67","version":"3.16.7","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-11-14T22:31:46"},{"id":"linode/3.16.5-x86-linode65","label":"3.16.5-x86-linode65","version":"3.16.5","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-10-13T13:40:00"},{"id":"linode/3.15.4-x86-linode64","label":"3.15.4-x86-linode64","version":"3.15.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-07-07T13:50:35"},{"id":"linode/3.15.3-x86-linode63","label":"3.15.3-x86-linode63","version":"3.15.3","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-07-02T12:12:37"},{"id":"linode/3.15.2-x86-linode62","label":"3.15.2-x86-linode62","version":"3.15.2","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-06-30T18:46:50"},{"id":"linode/3.14.5-x86-linode61","label":"3.14.5-x86-linode61","version":"3.14.5","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-06-05T20:05:44"},{"id":"linode/3.14.5-x86-linode60","label":"3.14.5-x86-linode60","version":"3.14.5","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-06-03T13:09:58"},{"id":"linode/3.14.4-x86-linode59","label":"3.14.4-x86-linode59","version":"3.14.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-05-13T17:42:22"},{"id":"linode/3.14.1-x86-linode58","label":"3.14.1-x86-linode58","version":"3.14.1","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-04-25T17:49:15"},{"id":"linode/3.13.7-x86-linode57","label":"3.13.7-x86-linode57","version":"3.13.7","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-03-25T18:21:50"},{"id":"linode/3.12.9-x86-linode56","label":"3.12.9-x86-linode56","version":"3.12.9","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2014-02-03T19:42:13"},{"id":"linode/3.11.6-x86-linode54","label":"3.11.6-x86-linode54","version":"3.11.6","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-10-23T16:06:29"},{"id":"linode/3.12.6-x86-linode55","label":"3.12.6-x86-linode55","version":"3.12.6","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-12-23T16:25:39"},{"id":"linode/3.10.3-x86-linode53","label":"3.10.3-x86-linode53","version":"3.10.3","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-07-26T16:35:12"},{"id":"linode/3.9.3-x86-linode52","label":"3.9.3-x86-linode52","version":"3.9.3","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-05-20T14:27:27"},{"id":"linode/3.9.2-x86-linode51","label":"3.9.2-x86-linode51","version":"3.9.2","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-05-14T16:13:27"},{"id":"linode/3.8.4-linode50","label":"3.8.4-linode50","version":"3.8.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-03-25T20:42:49"},{"id":"linode/3.7.10-linode49","label":"3.7.10-linode49","version":"3.7.10","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-02-27T19:49:45"},{"id":"linode/3.7.5-linode48","label":"3.7.5-linode48","version":"3.7.5","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2013-01-31T19:52:25"},{"id":"linode/3.6.5-linode47","label":"3.6.5-linode47","version":"3.6.5","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-11-04T17:42:14"},{"id":"linode/3.5.3-linode46","label":"3.5.3-linode46","version":"3.5.3","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-09-05T20:45:36"},{"id":"linode/3.5.2-linode45","label":"3.5.2-linode45","version":"3.5.2","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-08-15T18:16:29"},{"id":"linode/3.4.2-linode44","label":"3.4.2-linode44","version":"3.4.2","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-06-11T19:03:10"},{"id":"linode/3.0.18-linode43","label":"3.0.18-linode43","version":"3.0.18","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-01-30T17:42:21"},{"id":"linode/3.1.10-linode42","label":"3.1.10-linode42","version":"3.1.10","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-01-25T21:24:07"},{"id":"linode/3.0.17-linode41","label":"3.0.17-linode41","version":"3.0.17","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-01-25T21:24:05"},{"id":"linode/3.2.1-linode40","label":"3.2.1-linode40","version":"3.2.0","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2012-01-23T16:04:48"},{"id":"linode/3.1.0-linode39","label":"3.1.0-linode39","version":"3.1.0","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-10-25T17:57:05"},{"id":"linode/3.0.4-linode38","label":"3.0.4-linode38","version":"3.0.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-09-22T18:57:59"},{"id":"linode/3.0.4-linode37","label":"3.0.4-linode37","version":"3.0.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-09-12T16:03:31"},{"id":"linode/3.0.4-linode36","label":"3.0.4-linode36","version":"3.0.4","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-09-02T01:08:55"},{"id":"linode/3.0-linode35","label":"3.0.0-linode35","version":"3.0.0","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-08-02T15:43:52"},{"id":"linode/2.6.39.1-linode34","label":"2.6.39.1-linode34","version":"2.6.39","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-06-21T14:42:50"},{"id":"linode/2.6.39-linode33","label":"2.6.39-linode33","version":"2.6.39","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-05-25T19:05:05"},{"id":"linode/2.6.38.3-linode32","label":"2.6.38.3-linode32","version":"2.6.38","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-04-21T20:21:48"},{"id":"linode/2.6.38-linode31","label":"2.6.38-linode31","version":"2.6.38","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-03-21T21:44:09"},{"id":"linode/2.6.37-linode30","label":"2.6.37-linode30","version":"2.6.37","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2011-01-27T05:00:00"},{"id":"linode/2.6.35.7-linode29","label":"2.6.35.7-linode29","version":"2.6.35","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2010-10-13T04:00:00"},{"id":"linode/2.6.32.16-linode28","label":"2.6.32.16-linode28","version":"2.6.32","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2010-07-25T21:34:00"},{"id":"linode/2.6.34-linode27","label":"2.6.34-linode27","version":"2.6.34","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2010-07-16T04:00:00"},{"id":"linode/2.6.32.12-linode25","label":"2.6.32.12-linode25","version":"2.6.33","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2010-04-28T04:00:00"},{"id":"linode/2.6.33-linode24","label":"2.6.33-linode24","version":"2.6.33","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2010-02-24T22:05:00"},{"id":"linode/2.6.32-linode23","label":"2.6.32-linode23","version":"2.6.32","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2009-12-05T16:14:00"},{"id":"linode/2.6.18.8-linode22","label":"2.6.18.8-linode22","version":"2.6.18","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2009-11-10T05:00:00"},{"id":"linode/2.6.31.5-linode21","label":"2.6.31.5-linode21","version":"2.6.31","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2009-10-26T04:00:00"},{"id":"linode/2.6.30.5-linode20","label":"2.6.30.5-linode20","version":"2.6.30","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2009-08-17T04:00:00"},{"id":"linode/2.6.23.17-linode44","label":"2.6.23.17-linode44","version":"2.6.23","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2009-08-17T04:00:00"},{"id":"linode/2.6.18.8-linode19","label":"2.6.18.8-linode19","version":"2.6.18","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2009-08-14T04:00:00"},{"id":"linode/2.6.29-linode18","label":"2.6.29-linode18","version":"2.6.29","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2009-04-01T04:00:00"},{"id":"linode/2.6.28.3-linode17","label":"2.6.28.3-linode17","version":"2.6.28","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2009-02-04T05:00:00"},{"id":"linode/2.6.18.8-linode16","label":"2.6.18.8-linode16","version":"2.6.18","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2009-01-12T14:47:00"},{"id":"linode/2.6.28-linode15","label":"2.6.28-linode15","version":"2.6.28","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2008-12-29T05:00:00"},{"id":"linode/2.6.27.4-linode14","label":"2.6.27.4-linode14","version":"2.6.27","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2008-11-05T05:00:00"},{"id":"linode/2.6.26-linode13","label":"2.6.26-linode13","version":"2.6.26","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2008-07-13T23:15:00"},{"id":"linode/2.6.25.10-linode12","label":"2.6.25.10-linode12","version":"2.6.25","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2008-07-03T04:00:00"},{"id":"linode/2.6.18.8-linode10","label":"2.6.18.8-linode10","version":"2.6.18","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":"2008-06-23T04:00:00"},{"id":"linode/2.6.25-linode9","label":"2.6.25-linode9","version":"2.6.25","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2008-04-10T04:00:00"},{"id":"linode/2.6.24.4-linode8","label":"2.6.24.4-linode8","version":"2.6.24","kvm":false,"architecture":"i386","pvops":true,"deprecated":true,"built":"2008-03-31T04:00:00"},{"id":"linode/2.6.18.8-domU-linode7","label":"2.6.18.8-domU-linode7","version":"2.6.18","kvm":false,"architecture":"i386","pvops":false,"deprecated":true,"built":null},{"id":"linode/latest-2.6-64bit","label":"Latest 2.6 (2.6.39.1-x86_64-linode19)","version":"2.6.39","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2009-10-26T04:00:00"},{"id":"linode/latest-64bit","label":"Latest 64 bit (6.2.9-x86_64-linode160)","version":"6.2.9","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2023-04-05T19:30:32"},{"id":"linode/2.6.18.8-x86_64-linode10","label":"Latest Legacy (2.6.18.8-x86_64-linode10)","version":"2.6.18","kvm":false,"architecture":"x86_64","pvops":false,"deprecated":true,"built":"2009-08-17T04:00:00"},{"id":"linode/5.7.6-x86_64-linode136","label":"5.7.6-x86_64-linode136","version":"5.7.6","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-06-25T16:41:35"},{"id":"linode/5.6.14-x86_64-linode135","label":"5.6.14-x86_64-linode135","version":"5.6.14","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-06-01T14:06:45"},{"id":"linode/5.6.1-x86_64-linode134","label":"5.6.1-x86_64-linode134","version":"5.6.1","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2020-04-07T21:29:51"},{"id":"linode/5.4.10-x86_64-linode132","label":"5.4.10-x86_64-linode132","version":"5.4.10","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":false,"built":"2020-01-10T21:03:16"},{"id":"linode/5.3.11-x86_64-linode131","label":"5.3.11-x86_64-linode131","version":"5.3.11","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-11-14T20:39:27"},{"id":"linode/5.3.7-x86_64-linode130","label":"5.3.7-x86_64-linode130","version":"5.3.7","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-10-30T21:10:29"},{"id":"linode/5.2.9-x86_64-linode129","label":"5.2.9-x86_64-linode129","version":"5.2.9","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-08-21T18:49:31"},{"id":"linode/5.1.17-x86_64-linode128","label":"5.1.17-x86_64-linode128","version":"5.1.17","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-07-16T15:26:33"},{"id":"linode/5.1.11-x86_64-linode127","label":"5.1.11-x86_64-linode127","version":"5.1.11","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-06-17T22:47:20"},{"id":"linode/5.1.5-x86_64-linode126","label":"5.1.5-x86_64-linode126","version":"5.1.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-05-30T20:30:39"},{"id":"linode/4.14.120-x86_64-linode125","label":"4.14.120-x86_64-linode125","version":"4.14.120","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-05-21T10:57:46"},{"id":"linode/5.1.2-x86_64-linode124","label":"5.1.2-x86_64-linode124","version":"5.1.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-05-15T16:14:35"},{"id":"linode/5.0.8-x86_64-linode123","label":"5.0.8-x86_64-linode123","version":"5.0.8","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-04-17T18:39:56"},{"id":"linode/5.0.1-x86_64-linode122","label":"5.0.1-x86_64-linode122","version":"5.0.1","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-03-13T16:51:01"},{"id":"linode/4.20.4-x86_64-linode121","label":"4.20.4-x86_64-linode121","version":"4.20.4","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2019-01-25T19:13:29"},{"id":"linode/4.19.8-x86_64-linode120","label":"4.19.8-x86_64-linode120","version":"4.19.8","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-12-12T21:44:08"},{"id":"linode/4.19.5-x86_64-linode119","label":"4.19.5-x86_64-linode119","version":"4.19.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-11-29T16:36:53"},{"id":"linode/4.18.16-x86_64-linode118","label":"4.18.16-x86_64-linode118","version":"4.18.16","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-10-29T20:24:13"},{"id":"linode/4.18.8-x86_64-linode117","label":"4.18.8-x86_64-linode117","version":"4.18.8","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-09-19T12:55:56"},{"id":"linode/4.17.17-x86_64-linode116","label":"4.17.17-x86_64-linode116","version":"4.17.17","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-08-20T17:23:32"},{"id":"linode/4.17.15-x86_64-linode115","label":"4.17.15-x86_64-linode115","version":"4.17.15","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-08-16T17:13:28"},{"id":"linode/4.17.14-x86_64-linode114","label":"4.17.14-x86_64-linode114","version":"4.17.14","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-08-13T16:41:06"},{"id":"linode/4.17.14-x86_64-linode113","label":"4.17.14-x86_64-linode113","version":"4.17.14","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-08-10T21:07:56"},{"id":"linode/4.17.12-x86_64-linode112","label":"4.17.12-x86_64-linode112","version":"4.17.12","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-08-07T13:02:24"},{"id":"linode/4.17.11-x86_64-linode111","label":"4.17.11-x86_64-linode111","version":"4.17.11","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-07-31T19:51:53"},{"id":"linode/4.17.8-x86_64-linode110","label":"4.17.8-x86_64-linode110","version":"4.17.8","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-07-18T17:18:30"},{"id":"linode/4.17.2-x86_64-linode109","label":"4.17.2-x86_64-linode109","version":"4.17.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-06-26T19:42:57"},{"id":"linode/4.16.11-x86_64-linode108","label":"4.16.11-x86_64-linode108","version":"4.16.11","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-05-24T21:33:31"},{"id":"linode/4.15.18-x86_64-linode107","label":"4.15.18-x86_64-linode107","version":"4.15.18","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-05-02T20:21:04"},{"id":"linode/4.15.13-x86_64-linode106","label":"4.15.13-x86_64-linode106","version":"4.15.13","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-03-27T17:17:56"},{"id":"linode/4.15.12-x86_64-linode105","label":"4.15.12-x86_64-linode105","version":"4.15.12","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-03-22T20:08:43"},{"id":"linode/4.15.10-x86_64-linode104","label":"4.15.10-x86_64-linode104","version":"4.15.10","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-03-16T21:18:35"},{"id":"linode/4.15.8-x86_64-linode103","label":"4.15.8-x86_64-linode103","version":"4.15.8","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-03-10T21:25:43"},{"id":"linode/4.15.7-x86_64-linode102","label":"4.15.7-x86_64-linode102","version":"4.15.7","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-03-01T17:20:54"},{"id":"linode/4.14.19-x86_64-linode100","label":"4.14.19-x86_64-linode100","version":"4.14.19","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-02-13T19:07:46"},{"id":"linode/4.14.17-x86_64-linode99","label":"4.14.17-x86_64-linode99","version":"4.14.17","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-02-08T18:35:09"},{"id":"linode/4.9.80-x86_64-linode98","label":"4.9.80-x86_64-linode98","version":"4.9.80","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-02-08T18:34:16"},{"id":"linode/4.4.115-x86_64-linode97","label":"4.4.115-x86_64-linode97","version":"4.4.115","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-02-08T18:33:23"},{"id":"linode/4.4.113-x86_64-linode96","label":"4.4.113-x86_64-linode96","version":"4.4.113","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-01-25T22:47:11"},{"id":"linode/4.9.78-x86_64-linode95","label":"4.9.78-x86_64-linode95","version":"4.9.78","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-01-23T23:23:58"},{"id":"linode/4.14.14-x86_64-linode94","label":"4.14.14-x86_64-linode94","version":"4.14.14","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-01-23T02:10:08"},{"id":"linode/4.14.14-x86_64-linode93","label":"4.14.14-x86_64-linode93","version":"4.14.14","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-01-18T20:08:56"},{"id":"linode/4.9.64-x86_64-linode88","label":"4.9.64-x86_64-linode88","version":"4.9.64","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-12-01T23:10:11"},{"id":"linode/4.9.68-x86_64-linode89","label":"4.9.68-x86_64-linode89","version":"4.9.68","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-12-11T19:00:48"},{"id":"linode/4.14.12-x86_64-linode92","label":"4.14.12-x86_64-linode92","version":"4.14.12","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-01-05T16:31:28"},{"id":"linode/4.14.11-x86_64-linode91","label":"4.14.11-x86_64-linode91","version":"4.14.11","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2018-01-04T18:56:22"},{"id":"linode/4.9.56-x86_64-linode87","label":"4.9.56-x86_64-linode87","version":"4.9.56","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-10-13T21:09:35"},{"id":"linode/4.9.50-x86_64-linode86","label":"4.9.50-x86_64-linode86","version":"4.9.50","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-09-14T21:46:25"},{"id":"linode/4.9.36-x86_64-linode85","label":"4.9.36-x86_64-linode85","version":"4.9.36","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-07-10T13:16:08"},{"id":"linode/4.9.33-x86_64-linode83","label":"4.9.33-x86_64-linode83","version":"4.9.33","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-06-23T21:04:33"},{"id":"linode/4.9.15-x86_64-linode81","label":"4.9.15-x86_64-linode81","version":"4.9.15","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-03-22T13:49:33"},{"id":"linode/4.9.7-x86_64-linode80","label":"4.9.7-x86_64-linode80","version":"4.9.7","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2017-02-03T22:55:37"},{"id":"linode/4.9.0-x86_64-linode79","label":"4.9.0-x86_64-linode79","version":"4.9.0","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-12-13T20:11:03"},{"id":"linode/4.8.6-x86_64-linode78","label":"4.8.6-x86_64-linode78","version":"4.8.6","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-11-02T15:24:17"},{"id":"linode/4.8.4-x86_64-linode77","label":"4.8.4-x86_64-linode77","version":"4.8.4","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-10-27T18:53:07"},{"id":"linode/4.8.3-x86_64-linode76","label":"4.8.3-x86_64-linode76","version":"4.8.3","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-10-20T23:10:27"},{"id":"linode/4.8.1-x86_64-linode75","label":"4.8.1-x86_64-linode75","version":"4.8.1","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-10-07T22:22:13"},{"id":"linode/4.7.3-x86_64-linode73","label":"4.7.3-x86_64-linode73","version":"4.7.3","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-09-15T13:13:01"},{"id":"linode/4.7.0-x86_64-linode72","label":"4.7.0-x86_64-linode72","version":"4.7.0","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-08-05T14:34:25"},{"id":"linode/4.6.5-x86_64-linode71","label":"4.6.5-x86_64-linode71","version":"4.6.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-08-04T15:28:01"},{"id":"linode/4.6.3-x86_64-linode70","label":"4.6.3-x86_64-linode70","version":"4.6.3","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-07-07T22:08:28"},{"id":"linode/4.5.5-x86_64-linode69","label":"4.5.5-x86_64-linode69","version":"4.5.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-05-24T15:30:08"},{"id":"linode/4.5.3-x86_64-linode67","label":"4.5.3-x86_64-linode67","version":"4.5.3","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-05-10T19:42:43"},{"id":"linode/4.5.0-x86_64-linode65","label":"4.5.0-x86_64-linode65","version":"4.5.0","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-03-16T18:53:02"},{"id":"linode/4.4.4-x86_64-linode64","label":"4.4.4-x86_64-linode64","version":"4.4.4","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-03-10T22:24:51"},{"id":"linode/4.4.0-x86_64-linode63","label":"4.4.0-x86_64-linode63","version":"4.4.0","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2016-01-20T14:41:05"},{"id":"linode/4.1.5-x86_64-linode61","label":"4.1.5-x86_64-linode61","version":"4.1.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-08-24T19:00:43"},{"id":"linode/4.1.5-x86_64-linode60","label":"4.1.5-x86_64-linode60 ","version":"4.1.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-08-13T13:00:00"},{"id":"linode/4.1.0-x86_64-linode59","label":"4.1.0-x86_64-linode59 ","version":"4.1.0","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-06-22T15:19:32"},{"id":"linode/4.0.5-x86_64-linode58","label":"4.0.5-x86_64-linode58","version":"4.0.5","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-06-10T15:31:52"},{"id":"linode/4.0.4-x86_64-linode57","label":"4.0.4-x86_64-linode57","version":"4.0.4","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-05-21T15:15:47"},{"id":"linode/4.0.2-x86_64-linode56","label":"4.0.2-x86_64-linode56","version":"4.0.2","kvm":true,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-05-11T20:56:58"},{"id":"linode/4.0.1-x86_64-linode55","label":"4.0.1-x86_64-linode55","version":"4.0.1","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-05-04T13:43:23"},{"id":"linode/4.0-x86_64-linode54","label":"4.0-x86_64-linode54","version":"4.0","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-04-21T13:02:24"},{"id":"linode/3.19.1-x86_64-linode53","label":"3.19.1-x86_64-linode53","version":"3.19.1","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-03-11T18:00:36"},{"id":"linode/3.18.5-x86_64-linode52","label":"3.18.5-x86_64-linode52","version":"3.18.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-02-05T05:00:00"},{"id":"linode/3.18.3-x86_64-linode51","label":"3.18.3-x86_64-linode51","version":"3.18.3","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-01-23T15:12:45"},{"id":"linode/3.18.1-x86_64-linode50","label":"3.18.1-x86_64-linode50","version":"3.18.1","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2015-01-06T17:32:39"},{"id":"linode/3.16.7-x86_64-linode49","label":"3.16.7-x86_64-linode49","version":"3.16.7","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-11-14T22:31:46"},{"id":"linode/3.16.5-x86_64-linode46","label":"3.16.5-x86_64-linode46","version":"3.16.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-10-13T13:42:00"},{"id":"linode/3.15.4-x86_64-linode45","label":"3.15.4-x86_64-linode45","version":"3.15.4","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-07-07T13:50:35"},{"id":"linode/3.15.3-x86_64-linode44","label":"3.15.3-x86_64-linode44","version":"3.15.3","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-07-02T12:12:37"},{"id":"linode/3.15.2-x86_64-linode43","label":"3.15.2-x86_64-linode43","version":"3.15.2","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-06-30T18:46:50"},{"id":"linode/3.14.5-x86_64-linode42","label":"3.14.5-x86_64-linode42","version":"3.14.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-06-05T20:05:44"},{"id":"linode/3.14.5-x86_64-linode41","label":"3.14.5-x86_64-linode41","version":"3.14.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-06-03T13:09:58"},{"id":"linode/3.14.4-x86_64-linode40","label":"3.14.4-x86_64-linode40","version":"3.14.4","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-05-13T17:42:22"},{"id":"linode/3.14.1-x86_64-linode39","label":"3.14.1-x86_64-linode39","version":"3.14.1","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-04-25T17:42:13"},{"id":"linode/3.13.7-x86_64-linode38","label":"3.13.7-x86_64-linode38","version":"3.13.7","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-03-25T18:21:50"},{"id":"linode/3.12.9-x86_64-linode37","label":"3.12.9-x86_64-linode37","version":"3.12.9","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2014-02-03T19:42:13"},{"id":"linode/3.12.6-x86_64-linode36","label":"3.12.6-x86_64-linode36","version":"3.12.6","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-12-23T16:24:18"},{"id":"linode/3.11.6-x86_64-linode35","label":"3.11.6-x86_64-linode35","version":"3.11.6","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-10-23T16:06:29"},{"id":"linode/3.10.3-x86_64-linode34","label":"3.10.3-x86_64-linode34","version":"3.10.3","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-07-26T16:35:12"},{"id":"linode/3.9.3-x86_64-linode33","label":"3.9.3-x86_64-linode33","version":"3.9.3","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-05-20T14:27:27"},{"id":"linode/3.9.2-x86_64-linode32","label":"3.9.2-x86_64-linode32","version":"3.9.2","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-05-14T15:53:02"},{"id":"linode/3.8.4-x86_64-linode31","label":"3.8.4-x86_64-linode31","version":"3.8.4","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-03-25T20:42:49"},{"id":"linode/3.7.10-x86_64-linode30","label":"3.7.10-x86_64-linode30","version":"3.7.10","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-02-27T19:49:45"},{"id":"linode/3.7.5-x86_64-linode29","label":"3.7.5-x86_64-linode29","version":"3.7.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2013-01-31T19:52:25"},{"id":"linode/3.6.5-x86_64-linode28","label":"3.6.5-x86_64-linode28","version":"3.6.5","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2012-11-04T17:42:14"},{"id":"linode/3.5.3-x86_64-linode27","label":"3.5.3-x86_64-linode27","version":"3.5.3","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2012-09-05T20:32:28"},{"id":"linode/3.4.2-x86_64-linode25","label":"3.4.2-x86_64-linode25","version":"3.2.4","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2012-06-11T18:40:20"},{"id":"linode/3.0.18-x86_64-linode24","label":"3.0.18-x86_64-linode24 ","version":"3.0.18","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2012-01-30T17:42:21"},{"id":"linode/3.2.1-x86_64-linode23","label":"3.2.1-x86_64-linode23","version":"3.2.0","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2012-01-23T16:04:48"},{"id":"linode/3.1.0-x86_64-linode22","label":"3.1.0-x86_64-linode22","version":"3.1.0","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2011-10-25T18:24:49"},{"id":"linode/3.0.4-x86_64-linode21","label":"3.0.4-x86_64-linode21","version":"3.0.4","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2011-09-02T01:08:55"},{"id":"linode/3.0.0-x86_64-linode20","label":"3.0.0-x86_64-linode20","version":"3.0.0","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2011-08-02T16:59:12"},{"id":"linode/2.6.39.1-x86_64-linode19","label":"2.6.39.1-x86_64-linode19","version":"2.6.39","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2011-06-21T14:06:03"},{"id":"linode/2.6.39-x86_64-linode18","label":"2.6.39-x86_64-linode18","version":"2.6.39","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2011-05-25T19:05:05"},{"id":"linode/2.6.38-x86_64-linode17","label":"2.6.38-x86_64-linode17","version":"2.6.38","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2011-03-21T21:44:09"},{"id":"linode/2.6.35.4-x86_64-linode16","label":"2.6.35.4-x86_64-linode16","version":"2.6.35","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2010-09-20T04:00:00"},{"id":"linode/2.6.32.12-x86_64-linode15","label":"2.6.32.12-x86_64-linode15","version":"2.6.32","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2010-07-25T21:34:00"},{"id":"linode/2.6.34-x86_64-linode13","label":"2.6.34-x86_64-linode13","version":"2.6.34","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2010-06-17T04:00:00"},{"id":"linode/2.6.34-x86_64-linode14","label":"2.6.34-x86_64-linode14","version":"2.6.34","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2010-07-14T04:00:00"},{"id":"linode/2.6.32.12-x86_64-linode12","label":"2.6.32.12-x86_64-linode12","version":"2.6.32","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2010-04-28T04:00:00"},{"id":"linode/2.6.32-x86_64-linode11","label":"2.6.32-x86_64-linode11","version":"2.6.32","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2009-12-05T17:01:00"},{"id":"linode/2.6.18.8-x86_64-linode10","label":"2.6.18.8-x86_64-linode10","version":"2.6.18","kvm":false,"architecture":"x86_64","pvops":false,"deprecated":true,"built":"2009-11-10T16:53:00"},{"id":"linode/2.6.31.5-x86_64-linode9","label":"2.6.31.5-x86_64-linode9","version":"2.6.31","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2009-10-26T04:00:00"},{"id":"linode/2.6.30.5-x86_64-linode8","label":"2.6.30.5-x86_64-linode8","version":"2.6.30","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2009-08-17T04:00:00"},{"id":"linode/2.6.18.8-x86_64-linode7","label":"2.6.18.8-x86_64-linode7","version":"2.6.18","kvm":false,"architecture":"x86_64","pvops":false,"deprecated":true,"built":"2009-08-14T04:00:00"},{"id":"linode/2.6.29-x86_64-linode6","label":"2.6.29-x86_64-linode6","version":"2.6.29","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2009-04-02T04:00:00"},{"id":"linode/2.6.28.3-x86_64-linode5","label":"2.6.28.3-x86_64-linode5","version":"2.6.28","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2009-02-04T05:00:00"},{"id":"linode/2.6.28-x86_64-linode4","label":"2.6.28-x86_64-linode4","version":"2.6.28","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2008-12-29T05:00:00"},{"id":"linode/2.6.27.4-x86_64-linode3","label":"2.6.27.4-x86_64-linode3","version":"2.6.27","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2008-11-05T05:00:00"},{"id":"linode/2.6.16.38-x86_64-linode2","label":"2.6.16.38-x86_64-linode2","version":"2.6.16","kvm":false,"architecture":"x86_64","pvops":false,"deprecated":true,"built":"2008-03-23T04:00:00"},{"id":"linode/2.6.18.8-x86_64-linode1","label":"2.6.18.8-x86_64-linode1","version":"2.6.18","kvm":false,"architecture":"x86_64","pvops":false,"deprecated":true,"built":"2008-03-23T04:00:00"},{"id":"linode/3.5.2-x86_64-linode26","label":"3.5.2-x86_64-linode26","version":"3.5.2","kvm":false,"architecture":"x86_64","pvops":true,"deprecated":true,"built":"2012-08-15T18:38:16"},{"id":"linode/grub2","label":"GRUB 2","version":"2.06","kvm":true,"architecture":"x86_64","pvops":false,"deprecated":false,"built":"2022-08-29T14:28:00"},{"id":"linode/direct-disk","label":"Direct Disk","version":"","kvm":true,"architecture":"x86_64","pvops":false,"deprecated":false,"built":"2015-05-05T01:51:43"},{"id":"linode/grub-legacy","label":"GRUB (Legacy)","version":"2.0.0","kvm":true,"architecture":"x86_64","pvops":false,"deprecated":false,"built":"2015-04-29T15:32:30"},{"id":"linode/pv-grub_x86_32","label":"pv-grub-x86_32","version":"2.6.26","kvm":false,"architecture":"i386","pvops":false,"deprecated":false,"built":"2008-09-15T04:00:00"},{"id":"linode/pv-grub_x86_64","label":"pv-grub-x86_64","version":"2.6.26","kvm":false,"architecture":"x86_64","pvops":false,"deprecated":false,"built":"2008-11-14T05:00:00"}],"page":1,"pages":1,"results":326} \ No newline at end of file diff --git a/packages/manager/src/cachedData/marketplace.json b/packages/manager/src/cachedData/marketplace.json deleted file mode 100644 index e5f2eb4151d..00000000000 --- a/packages/manager/src/cachedData/marketplace.json +++ /dev/null @@ -1 +0,0 @@ -{"data":[{"id":1146319,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"MongoDB Cluster Null One-Click","description":"MongoDB Cluster Null One-Click\r\nNull stackscript for 1067004","ordinal":0,"logo_url":"assets/mongodbmarketplaceocc.svg","images":["linode/ubuntu22.04"],"deployments_total":38,"deployments_active":0,"is_public":true,"mine":false,"created":"2023-03-23T14:00:01","updated":"2023-10-18T12:38:31","rev_note":"","script":"#!/bin/bash\n\n# Null","user_defined_fields":[]},{"id":1146324,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Galera Cluster Null One-Click","description":"Galera Cluster Null One-Click\r\nNull Stackscript for 1088136","ordinal":0,"logo_url":"assets/galeramarketplaceocc.svg","images":["linode/ubuntu22.04"],"deployments_total":166,"deployments_active":17,"is_public":true,"mine":false,"created":"2023-03-23T14:19:14","updated":"2024-01-10T18:38:51","rev_note":"","script":"#!/bin/bash","user_defined_fields":[]},{"id":1142293,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Redis Sentinel Cluster Null One-Click","description":"Redis Sentinel Cluster Null One-Click\r\nNull stackscript for 1132204","ordinal":0,"logo_url":"assets/redissentinelmarketplaceocc.svg","images":["linode/ubuntu22.04"],"deployments_total":175,"deployments_active":8,"is_public":true,"mine":false,"created":"2023-03-16T14:20:59","updated":"2023-12-17T23:45:42","rev_note":"","script":"#!/bin/bash","user_defined_fields":[]},{"id":1146322,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"PostgreSQL Cluster Null One-Click","description":"PostgreSQL Cluster Null One-Click\r\nNull Stackscript for 1068726","ordinal":0,"logo_url":"assets/postgresqlmarketplaceocc.svg","images":["linode/ubuntu22.04"],"deployments_total":244,"deployments_active":8,"is_public":true,"mine":false,"created":"2023-03-23T14:17:07","updated":"2024-01-10T14:06:08","rev_note":"","script":"#!/bin/bash\n\n# Null","user_defined_fields":[]},{"id":1226546,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"HashiCorp Nomad Cluster Null One-Click","description":"Nomad Cluster Null One-Click","ordinal":0,"logo_url":"assets/nomadocc.svg","images":["linode/ubuntu22.04"],"deployments_total":392,"deployments_active":16,"is_public":true,"mine":false,"created":"2023-08-25T19:08:21","updated":"2023-12-14T17:37:41","rev_note":"","script":"#!/bin/bash/","user_defined_fields":[]},{"id":1226547,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"HashiCorp Nomad Cluster Clients Null One-Click","description":"Nomad Cluster Clients One-Click","ordinal":0,"logo_url":"assets/nomadclientsocc.svg","images":["linode/ubuntu22.04"],"deployments_total":428,"deployments_active":24,"is_public":true,"mine":false,"created":"2023-08-25T19:08:57","updated":"2023-12-14T17:40:08","rev_note":"","script":"#!/bin/bash","user_defined_fields":[]},{"id":401697,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"WordPress One-Click","description":"Wordpress One Click App","ordinal":1,"logo_url":"assets/WordPress.svg","images":["linode/ubuntu22.04"],"deployments_total":66359,"deployments_active":4748,"is_public":true,"mine":false,"created":"2019-03-08T21:04:07","updated":"2024-01-10T21:35:15","rev_note":"","script":"#!/bin/bash\nset -e\ntrap \"cleanup $? $LINENO\" EXIT\n\n## Wordpress Settings\n#\n#\n\n#\n#\n#\n#\n\n## Linode/SSH Security Settings\n#\n#\n#\n#\n\n## Domain Settings\n#\n#\n#\n\n# git repo\nexport GIT_REPO=\"https://github.com/akamai-compute-marketplace/marketplace-apps.git\"\nexport WORK_DIR=\"/tmp/marketplace-apps\"\nexport MARKETPLACE_APP=\"apps/linode-marketplace-wordpress\"\n\n# enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\nfunction cleanup {\n if [ -d \"${WORK_DIR}\" ]; then\n rm -rf ${WORK_DIR}\n fi\n\n}\n\nfunction udf {\n local group_vars=\"${WORK_DIR}/${MARKETPLACE_APP}/group_vars/linode/vars\"\n local web_stack=$(echo ${WEBSERVER_STACK} | tr [:upper:] [:lower:])\n sed 's/ //g' < ${group_vars}\n\n # deployment vars\n soa_email_address: ${SOA_EMAIL_ADDRESS}\n webserver_stack: ${web_stack}\n site_title: ${SITE_TITLE}\n wp_admin_user: ${WP_ADMIN_USER}\n wp_db_user: ${WP_DB_USER}\n wp_db_name: ${WP_DB_NAME}\nEOF\n\n if [[ -n ${USER_NAME} ]]; then\n echo \"username: ${USER_NAME}\" >> ${group_vars};\n else echo \"No username entered\";\n fi\n\n if [[ -n ${PASSWORD} ]]; then\n echo \"password: ${PASSWORD}\" >> ${group_vars};\n else echo \"No password entered\";\n fi\n\n if [[ -n ${PUBKEY} ]]; then\n echo \"pubkey: ${PUBKEY}\" >> ${group_vars};\n else echo \"No pubkey entered\";\n fi\n\n if [ \"$DISABLE_ROOT\" = \"Yes\" ]; then\n echo \"disable_root: yes\" >> ${group_vars};\n else echo \"Leaving root login enabled\";\n fi\n\n if [[ -n ${TOKEN_PASSWORD} ]]; then\n echo \"token_password: ${TOKEN_PASSWORD}\" >> ${group_vars};\n else echo \"No API token entered\";\n fi\n\n if [[ -n ${DOMAIN} ]]; then\n echo \"domain: ${DOMAIN}\" >> ${group_vars};\n #else echo \"No domain entered\";\n else echo \"default_dns: $(hostname -I | awk '{print $1}'| tr '.' '-' | awk {'print $1 \".ip.linodeusercontent.com\"'})\" >> ${group_vars};\n fi\n\n if [[ -n ${SUBDOMAIN} ]]; then\n echo \"subdomain: ${SUBDOMAIN}\" >> ${group_vars};\n else echo \"subdomain: www\" >> ${group_vars};\n fi\n}\n\nfunction run {\n # install dependancies\n apt-get update\n apt-get install -y git python3 python3-pip\n\n # clone repo and set up ansible environment\n git -C /tmp clone ${GIT_REPO}\n # for a single testing branch\n # git -C /tmp clone -b ${BRANCH} ${GIT_REPO}\n\n # venv\n cd ${WORK_DIR}/${MARKETPLACE_APP}\n pip3 install virtualenv\n python3 -m virtualenv env\n source env/bin/activate\n pip install pip --upgrade\n pip install -r requirements.txt\n ansible-galaxy install -r collections.yml\n\n # populate group_vars\n udf\n # run playbooks\n for playbook in provision.yml site.yml; do ansible-playbook -v $playbook; done\n}\n\nfunction installation_complete {\n # dumping credentials\n egrep \"(*^wp_|*mysql)\" ${WORK_DIR}/${MARKETPLACE_APP}/group_vars/linode/vars | awk {'print $1 $2'} > /root/.linode_credentials.txt\n cat << EOF\n#########################\n# INSTALLATION COMPLETE #\n############################################\n# The Mysql root password can be found at: #\n# - /root/.linode_credentials.txt #\n# #\n# * Hugs are worth more than handshakes * #\n############################################\nEOF\n}\n# main\nrun && installation_complete\ncleanup","user_defined_fields":[{"name":"soa_email_address","label":"Email address (for the Let's Encrypt SSL certificate)","example":"user@domain.tld"},{"name":"webserver_stack","label":"The stack you are looking to deploy Wordpress on","oneof":"LAMP,LEMP"},{"name":"site_title","label":"Website title","example":"My Blog"},{"name":"wp_admin_user","label":"Admin username","example":"admin"},{"name":"wp_db_user","label":"Wordpress database user","example":"wordpress"},{"name":"wp_db_name","label":"Wordpress database name","example":"wordpress"},{"name":"user_name","label":"The limited sudo user to be created for the Linode","default":""},{"name":"password","label":"The password for the limited sudo user","example":"an0th3r_s3cure_p4ssw0rd","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode (Recommended)","default":""},{"name":"token_password","label":"Your Linode API token. This is needed to create your Linode's DNS records","default":""},{"name":"subdomain","label":"Subdomain","example":"The subdomain for the DNS record. `www` will be entered if no subdomain is supplied (Requires Domain)","default":""},{"name":"domain","label":"Domain","example":"The domain for the DNS record: example.com (Requires API token)","default":""}]},{"id":632758,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Nextcloud One-Click","description":"One Click App - Nextcloud","ordinal":2,"logo_url":"assets/nextcloud.svg","images":["linode/ubuntu22.04"],"deployments_total":19420,"deployments_active":825,"is_public":true,"mine":false,"created":"2020-02-18T16:40:45","updated":"2024-01-10T15:11:14","rev_note":"","script":"#!/bin/bash\nset -e\ntrap \"cleanup $? $LINENO\" EXIT\n\n##Linode/SSH security settings\n#\n#\n#\n#\n\n## Domain Settings\n#\n#\n#\n\n## harbor Settings \n#\n\n# git repo\nexport GIT_REPO=\"https://github.com/akamai-compute-marketplace/marketplace-apps.git\"\nexport WORK_DIR=\"/tmp/marketplace-apps\" \nexport MARKETPLACE_APP=\"apps/linode-marketplace-nextcloud\"\n\n# enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\nfunction cleanup {\n if [ -d \"${WORK_DIR}\" ]; then\n rm -rf ${WORK_DIR}\n fi\n\n}\n\nfunction udf {\n local group_vars=\"${WORK_DIR}/${MARKETPLACE_APP}/group_vars/linode/vars\"\n \n if [[ -n ${USER_NAME} ]]; then\n echo \"username: ${USER_NAME}\" >> ${group_vars};\n else echo \"No username entered\";\n fi\n\n if [ \"$DISABLE_ROOT\" = \"Yes\" ]; then\n echo \"disable_root: yes\" >> ${group_vars};\n else echo \"Leaving root login enabled\";\n fi\n\n if [[ -n ${PASSWORD} ]]; then\n echo \"password: ${PASSWORD}\" >> ${group_vars};\n else echo \"No password entered\";\n fi\n\n if [[ -n ${PUBKEY} ]]; then\n echo \"pubkey: ${PUBKEY}\" >> ${group_vars};\n else echo \"No pubkey entered\";\n fi\n\n # nextcloud vars\n \n if [[ -n ${SOA_EMAIL_ADDRESS} ]]; then\n echo \"soa_email_address: ${SOA_EMAIL_ADDRESS}\" >> ${group_vars};\n fi\n\n if [[ -n ${DOMAIN} ]]; then\n echo \"domain: ${DOMAIN}\" >> ${group_vars};\n else\n echo \"default_dns: $(hostname -I | awk '{print $1}'| tr '.' '-' | awk {'print $1 \".ip.linodeusercontent.com\"'})\" >> ${group_vars};\n fi\n\n if [[ -n ${SUBDOMAIN} ]]; then\n echo \"subdomain: ${SUBDOMAIN}\" >> ${group_vars};\n else echo \"subdomain: www\" >> ${group_vars};\n fi\n \n if [[ -n ${TOKEN_PASSWORD} ]]; then\n echo \"token_password: ${TOKEN_PASSWORD}\" >> ${group_vars};\n else echo \"No API token entered\";\n fi\n\n}\n\nfunction run {\n # install dependancies\n apt-get update\n apt-get install -y git python3 python3-pip\n\n # clone repo and set up ansible environment\n git -C /tmp clone ${GIT_REPO}\n # for a single testing branch\n # git -C /tmp clone --single-branch --branch ${BRANCH} ${GIT_REPO}\n\n # venv\n cd ${WORK_DIR}/${MARKETPLACE_APP}\n pip3 install virtualenv\n python3 -m virtualenv env\n source env/bin/activate\n pip install pip --upgrade\n pip install -r requirements.txt\n ansible-galaxy install -r collections.yml\n \n\n # populate group_vars\n udf\n # run playbooks\n for playbook in site.yml; do ansible-playbook -v $playbook; done\n \n}\n\nfunction installation_complete {\n echo \"Installation Complete\"\n}\n# main\nrun && installation_complete\ncleanup","user_defined_fields":[{"name":"user_name","label":"The limited sudo user to be created for the Linode","default":""},{"name":"password","label":"The password for the limited sudo user","example":"an0th3r_s3cure_p4ssw0rd","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode (Recommended)","default":""},{"name":"token_password","label":"Your Linode API token. This is needed to create your server's DNS records","default":""},{"name":"subdomain","label":"Subdomain","example":"The subdomain for the DNS record: www (Requires Domain)","default":""},{"name":"domain","label":"Domain","example":"The domain for the DNS record: example.com (Requires API token)","default":""},{"name":"soa_email_address","label":"email DNS record SOA","default":""}]},{"id":1017300,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Kali Linux One-Click","description":"Kali Linux One-Click","ordinal":3,"logo_url":"assets/kalilinux.svg","images":["linode/kali"],"deployments_total":17398,"deployments_active":458,"is_public":true,"mine":false,"created":"2022-06-21T14:38:37","updated":"2024-01-10T20:55:33","rev_note":"","script":"#!/bin/bash\n## Kali\n#\n#\n#\n#\n#\n\n## Linode/SSH Security Settings\n#\n#\n\n## Domain Settings\n#\n#\n#\n#\n\n## Enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\nset -o pipefail\n\n# Source the Linode Bash StackScript, API, and OCA Helper libraries\nsource \nsource \nsource \n\n# Source and run the New Linode Setup script for DNS/SSH configuration\nsource \n\nfunction headlessoreverything {\n if [ $HEADLESS == \"Yes\" ] && [ $EVERYTHING == \"Yes\" ]; then \n DEBIAN_FRONTEND=noninteractive apt-get install kali-linux-everything -y -yq -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\"\n elif [ $EVERYTHING == \"Yes\" ] && [ $HEADLESS == \"No\" ]; then\n DEBIAN_FRONTEND=noninteractive apt-get install kali-linux-everything -y -yq -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\"\n elif [ $HEADLESS == \"Yes\" ] && [ $EVERYTHING == \"No\" ]; then \n DEBIAN_FRONTEND=noninteractive apt-get install kali-linux-headless -y -yq -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\"\n elif [ $HEADLESS == \"No\" ] && [ $EVERYTHING == \"No\" ]; then \n echo \"No Package Selected\"\n fi\n}\n\nfunction vncsetup {\n if [ $VNC == \"Yes\" ]; then \n ## XFCE & VNC Config\n apt-get install xfce4 xfce4-goodies dbus-x11 tigervnc-standalone-server expect -y -yq -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\"\n\n readonly VNCSERVER_SET_PASSWORD=$(expect -c \"\nspawn sudo -u $USERNAME vncserver\nexpect \\\"Password:\\\"\nsend \\\"$PASSWORD\\r\\\"\nexpect \\\"Verify:\\\"\nsend \\\"$PASSWORD\\r\\\"\nexpect \\\"Would you like to enter a view-only password (y/n)?\\\"\nsend \\\"n\\r\\\"\nexpect eof\n\")\necho \"$VNCSERVER_SET_PASSWORD\"\n sleep 2\n killvncprocess=$(ps aux | grep \"/usr/bin/Xtigervnc :1 -localhost=1 -desktop\" | head -n 1 | awk '{ print $2; }')\n kill $killvncprocess\n touch /etc/systemd/system/vncserver@.service\n cat < /etc/systemd/system/vncserver@.service\n[Unit]\nDescription=a wrapper to launch an X server for VNC\nAfter=syslog.target network.target\n[Service]\nType=forking\nUser=$USERNAME\nGroup=$USERNAME\nWorkingDirectory=/home/$USERNAME\nExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1\nExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i\nExecStop=/usr/bin/vncserver -kill :%i\n[Install]\nWantedBy=multi-user.target\nEOF\n systemctl daemon-reload\n systemctl start vncserver@1.service\n systemctl enable vncserver@1.service\n\n cat < /etc/motd\n###################################\n# VNC SSH Tunnel Instructions #\n###################################\n\n* Ensure you have a VNC Client installed on your local machine\n* Run the command below to start the SSH tunnel for VNC \n\n ssh -L 61000:localhost:5901 -N -l $USERNAME $FQDN\n\n* For more Detailed documentation please visit the offical Documentation below\n\n https://www.linode.com/docs/products/tools/marketplace/guides/kalilinux\n\n### To remove this message, you can edit the /etc/motd file ###\nEOF\n fi\n}\n\nfunction main {\n headlessoreverything\n vncsetup\n stackscript_cleanup\n}\n\nmain","user_defined_fields":[{"name":"everything","label":"Would you like to Install the Kali Everything Package?","oneof":"Yes,No","default":"Yes"},{"name":"headless","label":"Would you like to Install the Kali Headless Package?","oneof":"Yes,No","default":"No"},{"name":"vnc","label":"Would you like to setup VNC to access Kali XFCE Desktop","oneof":"Yes,No","default":"Yes"},{"name":"username","label":"The VNC user to be created for the Linode. The username accepts only lowercase letters, numbers, dashes (-) and underscores (_)"},{"name":"password","label":"The password for the limited VNC user"},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"token_password","label":"Your Linode API token. This is required for creating DNS records.","default":""},{"name":"subdomain","label":"The subdomain for the Linode's DNS record (Requires API token)","default":""},{"name":"domain","label":"The domain for the Linode's DNS record (Requires API token)","default":""},{"name":"soa_email_address","label":"Email address for SOA records (Requires API token)","default":""}]},{"id":593835,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Plesk One-Click","description":"Plesk is the leading secure WordPress and website management platform. This Stackscript installs the latest publicly available Plesk, activates a trial license, installs essential extensions, and sets up and configures the firewall. Please allow the script around 15 minutes to finish.","ordinal":4,"logo_url":"assets/plesk.svg","images":["linode/centos7","linode/ubuntu20.04"],"deployments_total":10673,"deployments_active":494,"is_public":true,"mine":false,"created":"2019-09-26T17:34:17","updated":"2024-01-10T20:49:03","rev_note":"updated wording","script":"#!/bin/bash\n# This block defines the variables the user of the script needs to input\n# when deploying using this script.\n#\n## Enable logging\nset -xo pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n## Import the Bash StackScript Library\nsource \n## Import the DNS/API Functions Library\nsource \n## Import the OCA Helper Functions\nsource \n## Run initial configuration tasks (DNS/SSH stuff, etc...)\nsource \n\nfunction pleskautoinstall {\n echo \"Downloading Plesk Auto-Installer\"\n sh <(curl https://autoinstall.plesk.com/one-click-installer || wget -O - https://autoinstall.plesk.com/one-click-installer)\n echo \"turning on http2\"\n /usr/sbin/plesk bin http2_pref --enable\n}\n\nfunction firewall {\n echo \"Setting Firewall to allow proper ports.\"\n if [ \"${detected_distro[distro]}\" = 'centos' ]; then \n iptables -I INPUT -p tcp --dport 21 -j ACCEPT\n iptables -I INPUT -p tcp --dport 22 -j ACCEPT\n iptables -I INPUT -p tcp --dport 25 -j ACCEPT\n iptables -I INPUT -p tcp --dport 80 -j ACCEPT\n iptables -I INPUT -p tcp --dport 110 -j ACCEPT\n iptables -I INPUT -p tcp --dport 143 -j ACCEPT\n iptables -I INPUT -p tcp --dport 443 -j ACCEPT\n iptables -I INPUT -p tcp --dport 465 -j ACCEPT\n iptables -I INPUT -p tcp --dport 993 -j ACCEPT\n iptables -I INPUT -p tcp --dport 995 -j ACCEPT\n iptables -I INPUT -p tcp --dport 8443 -j ACCEPT\n iptables -I INPUT -p tcp --dport 8447 -j ACCEPT\n iptables -I INPUT -p tcp --dport 8880 -j ACCEPT\n elif [ \"${detected_distro[distro]}\" = 'ubuntu' ]; then\n ufw allow 21\n ufw allow 22\n ufw allow 25\n ufw allow 80\n ufw allow 110\n ufw allow 143\n ufw allow 443\n ufw allow 465\n ufw allow 993\n ufw allow 995\n ufw allow 8443\n ufw allow 8447\n ufw allow 8880\nelse \necho \"Distro Not supported\"\nfi\n}\n\nfunction main {\n pleskautoinstall\n firewall\n}\n\n# Execute script\nsystem_update\nmain\nstackscript_cleanup","user_defined_fields":[]},{"id":595742,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"cPanel One-Click","description":"cPanel One-Click","ordinal":5,"logo_url":"assets/cpanel.svg","images":["linode/almalinux8","linode/rocky8"],"deployments_total":28549,"deployments_active":979,"is_public":true,"mine":false,"created":"2019-09-30T20:17:52","updated":"2024-01-10T20:44:43","rev_note":"","script":"#!/bin/bash\nset -e\n\n# Commit: fde6587e08ea95321ce010e52a9c1b8d02455a97\n# Commit date: 2023-02-13 17:00:46 -0600\n# Generated: 2023-02-17 11:00:28 -0600\n\n# Add Logging to /var/log/stackscript.log for future troubleshooting\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\necho $(date +%Y%m%d%H%M%S) >> /tmp/cpdebug.log\n\n# Linode's Weblish console will truncate lines unless you do this tput smam. This\n# instructs the terminal to wrap your lines, which is especially important so that\n# the WHM login URL that gets printed at the end can be copied.\ntput smam\n\nsource /etc/os-release\n\nis_os_and_version_id_prefix() {\n [[ $ID == $1 ]] && [[ $VERSION_ID =~ ^$2 ]]\n}\n\nis_almalinux8() {\n is_os_and_version_id_prefix almalinux 8\n}\n\nis_centos7() {\n is_os_and_version_id_prefix centos 7\n}\n\nis_cloudlinux7() {\n is_os_and_version_id_prefix cloudlinux 7\n}\n\nis_cloudlinux8() {\n is_os_and_version_id_prefix cloudlinux 8\n}\n\nis_rocky8() {\n is_os_and_version_id_prefix rocky 8\n}\n\nis_ubuntu20() {\n is_os_and_version_id_prefix ubuntu 20.04\n}\n\nis_supported_os() {\n is_almalinux8 || \\\n is_centos7 || \\\n is_cloudlinux7 || \\\n is_cloudlinux8 || \\\n is_rocky8 || \\\n is_ubuntu20\n}\n\nhas_yum() {\n which yum >/dev/null 2>&1\n}\n\nhas_dnf() {\n which dnf >/dev/null 2>&1\n}\n\nhas_apt() {\n which apt >/dev/null 2>&1\n}\n\nis_networkmanager_enabled() {\n systemctl is-enabled NetworkManager.service > /dev/null 2>&1\n}\n\n# cPanel & WHM is incompatible with NetworkManager\nif is_networkmanager_enabled; then\n systemctl stop NetworkManager.service\n systemctl disable NetworkManager.service\n if has_dnf; then\n dnf -y remove NetworkManager\n elif has_yum; then\n yum -y remove NetworkManager\n fi\nfi\n\nhostnamectl set-hostname server.hostname.tld\n\ncd /home && curl -so installer -L https://securedownloads.cpanel.net/latest\n\nif is_supported_os; then\n if is_ubuntu20; then\n apt-get -o Acquire::ForceIPv4=true update -y\n DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::=\"--force-confdef\" -o DPkg::options::=\"--force-confold\" install grub-pc\n sh installer --skiplicensecheck --skip-cloudlinux\n else\n sh installer --skiplicensecheck\n fi\nelse\n echo \"Your distribution is not supported by this StackScript.\"\n install -d -v -m 711 /var/cpanel\n touch /var/cpanel/cpinit.failed\nfi\n\nrm -f /etc/cpupdate.conf\ncat > /root/.bash_profile <<'END_OF_BASH_PROFILE'\n# .bash_profile\n# Get the aliases and functions\nif [ -f ~/.bashrc ]; then\n . ~/.bashrc\nfi\n# User specific environment and startup programs\nPATH=$PATH:$HOME/bin\nexport PATH\nbash /etc/motd.sh\nif [ -t 0 ]; then\n URL=`whmlogin --nowait 2> /dev/null`\n WHMLOGIN_RETURN=$?\n if [ $WHMLOGIN_RETURN == 1 ]; then\n # whmlogin doesn't support --nowait. Output a URL and hope it's accurate.\n echo \"To log in to WHM as the root user, visit the following address in your web browser:\"\n echo \"\"\n whmlogin\n echo \"\"\n echo \"Thank you for using cPanel & WHM!\"\n else\n if [ $WHMLOGIN_RETURN == 2 ]; then\n # whmlogin indicates that cpinit hasn't updated the IP/hostname yet.\n echo \"To log in to WHM as the root user, run the command 'whmlogin' to get a web address for your browser.\"\n echo \"\"\n echo \"Thank you for using cPanel & WHM!\"\n else\n # whmlogin returned a valid URL to use.\n echo \"To log in to WHM as the root user, visit the following address in your web browser:\"\n echo \"\"\n echo \"$URL\"\n echo \"\"\n echo \"Thank you for using cPanel & WHM!\"\n fi\n fi\nfi\nEND_OF_BASH_PROFILE\n\ncat > /etc/motd.sh <<'END_OF_MOTD'\n#!/bin/bash\nsource /etc/os-release\necho \"\n ____ _ ___ __ ___ _ __ __\n ___| _ \\ __ _ _ __ ___| | ( _ ) \\ \\ / / | | | \\/ |\n / __| |_) / _. | ._ \\ / _ \\ | / _ \\/\\ \\ \\ /\\ / /| |_| | |\\/| |\n| (__| __/ (_| | | | | __/ | | (_> < \\ V V / | _ | | | |\n \\___|_| \\__._|_| |_|\\___|_| \\___/\\/ \\_/\\_/ |_| |_|_| |_|\n\"\necho \"Welcome to cPanel & WHM `/usr/local/cpanel/cpanel -V`\"\necho \"\"\necho \"Running $PRETTY_NAME\"\necho \"\"\necho \"For our full cPanel & WHM documentation: https://go.cpanel.net/docs\"\necho \"\"\necho \"For information on how to quickly set up a website in cPanel & WHM: https://go.cpanel.net/buildasite\"\necho \"\" # This new line makes output from bash_profiles easier to read\nEND_OF_MOTD\ntouch /var/cpanel/cpinit.done","user_defined_fields":[]},{"id":691621,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Cloudron One-Click","description":"Cloudron One-Click","ordinal":6,"logo_url":"assets/cloudron.svg","images":["linode/ubuntu20.04"],"deployments_total":13962,"deployments_active":604,"is_public":true,"mine":false,"created":"2020-11-30T21:21:45","updated":"2024-01-10T19:35:46","rev_note":"","script":"#!/bin/bash\n\n# Add Logging to /var/log/stackscript.log for future troubleshooting\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# apt-get updates\n echo 'Acquire::ForceIPv4 \"true\";' > /etc/apt/apt.conf.d/99force-ipv4\n export DEBIAN_FRONTEND=noninteractive\n apt-get update -y\n\nwget https://cloudron.io/cloudron-setup\nchmod +x cloudron-setup\n./cloudron-setup --provider linode-mp\n\necho All finished! Rebooting...\n(sleep 5; reboot) &","user_defined_fields":[]},{"id":692092,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Secure Your Server One-Click","description":"Secure Your Server One-Click","ordinal":7,"logo_url":"assets/secureyourserver.svg","images":["linode/debian10","linode/ubuntu20.04","linode/debian11","linode/ubuntu22.04"],"deployments_total":4896,"deployments_active":750,"is_public":true,"mine":false,"created":"2020-12-03T10:01:28","updated":"2024-01-10T20:16:31","rev_note":"","script":"#!/usr/bin/env bash\n\n## User and SSH Security\n#\n#\n#\n#\n\n## Domain\n#\n#\n#\n#\n#\n\n## Block Storage\n#\n#\n\n\n# Enable logging for the StackScript\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Source Linode Helpers\nsource \nsource \nsource \nsource \n\n# Cleanup\nstackscript_cleanup","user_defined_fields":[{"name":"username","label":"The limited sudo user to be created for the Linode. (lower case only)"},{"name":"password","label":"The password for the limited sudo user"},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode"},{"name":"disable_root","label":"Would you like to disable root login over SSH?","oneof":"Yes,No"},{"name":"token_password","label":"Your Linode API token - This is required for creating DNS records","default":""},{"name":"domain","label":"The domain for the Linode's DNS record (Requires API token)","default":""},{"name":"subdomain","label":"The subdomain for the Linode's DNS record (Requires API token and domain)","default":""},{"name":"soa_email_address","label":"Your email address. This is used for creating DNS records and website VirtualHost configuration.","default":""},{"name":"send_email","label":"Would you like to be able to send email from this domain? (Requires domain)","oneof":"Yes,No","default":"No"},{"name":"volume","label":"To use a Block Storage volume, enter its name here.","default":""},{"name":"volume_size","label":"If creating a new Block Storage volume, enter its size in GB (NOTE: This creates a billable resource at $0.10/month per GB).","default":""}]},{"id":925722,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Pritunl One-Click","description":"Pritunl One-Click","ordinal":8,"logo_url":"assets/pritunl.svg","images":["linode/debian10","linode/ubuntu20.04"],"deployments_total":1210,"deployments_active":74,"is_public":true,"mine":false,"created":"2021-10-26T15:23:37","updated":"2024-01-09T18:08:12","rev_note":"","script":"#!/usr/bin/env bash\n\n## Linode/SSH Security Settings\n#\n#\n#\n#\n\n## Domain Settings\n#\n#\n#\n#\n\n## Enable logging\nset -o pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n## Import the Bash StackScript Library\nsource \n## Import the DNS/API Functions Library\nsource \n## Import the OCA Helper Functions\nsource \n## Run initial configuration tasks (DNS/SSH stuff, etc...)\nsource \n\n# Update system & set hostname & basic security\nset_hostname\napt_setup_update\nufw_install\nufw allow 443\nufw allow 80\nfail2ban_install\n\n# Mongo Install\napt-get install -y wget gnupg dirmngr \nwget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -\nif [ \"${detected_distro[distro]}\" = 'debian' ]; then \necho \"deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main\" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list\nelif [ \"${detected_distro[distro]}\" = 'ubuntu' ]; then\necho \"deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse\" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list\nelse \necho \"Setting this up for the future incase we add more distros\"\nfi\napt-get update -y\napt-get install -y mongodb-org\nsystemctl enable mongod.service\nsystemctl start mongod.service\n\n# Pritunl\napt-key adv --keyserver hkp://keyserver.ubuntu.com --recv E162F504A20CDF15827F718D4B7C549A058F8B6B\napt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A\nif [ \"${detected_distro[distro]}\" = 'debian' ]; then \necho \"deb http://repo.pritunl.com/stable/apt buster main\" | tee /etc/apt/sources.list.d/pritunl.list\nelif [ \"${detected_distro[distro]}\" = 'ubuntu' ]; then\necho \"deb http://repo.pritunl.com/stable/apt focal main\" | tee /etc/apt/sources.list.d/pritunl.list\nelse \necho \"Setting this up for the future incase we add more distros\"\nfi\n\napt update -y\napt install -y pritunl\n\nsystemctl enable pritunl.service\nsystemctl start pritunl.service\n\n# Performance tune\necho \"* hard nofile 64000\" >> /etc/security/limits.conf\necho \"* soft nofile 64000\" >> /etc/security/limits.conf\necho \"root hard nofile 64000\" >> /etc/security/limits.conf\necho \"root soft nofile 64000\" >> /etc/security/limits.conf\n\n# Cleanup\nstackscript_cleanup","user_defined_fields":[{"name":"username","label":"The limited sudo user to be created for the Linode","default":""},{"name":"password","label":"The password for the limited sudo user","example":"an0th3r_s3cure_p4ssw0rd","default":""},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"token_password","label":"Your Linode API token. This is needed to create your WordPress server's DNS records","default":""},{"name":"subdomain","label":"Subdomain","example":"The subdomain for the DNS record: www (Requires Domain)","default":""},{"name":"domain","label":"Domain","example":"The domain for the DNS record: example.com (Requires API token)","default":""},{"name":"soa_email_address","label":"Email address for the SOA record","default":""}]},{"id":741206,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"CyberPanel One-Click","description":"CyberPanel One-Click","ordinal":9,"logo_url":"assets/cyberpanel.svg","images":["linode/ubuntu20.04","linode/ubuntu22.04"],"deployments_total":11394,"deployments_active":580,"is_public":true,"mine":false,"created":"2021-01-27T02:46:19","updated":"2024-01-10T20:39:36","rev_note":"","script":"#!/bin/bash\n### linode\n## Enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n### Install cyberpanel\nbash <( curl -sk https://raw.githubusercontent.com/litespeedtech/ls-cloud-image/master/Setup/cybersetup.sh )\n\n### Regenerate password for Web Admin, Database, setup Welcome Message\nbash <( curl -sk https://raw.githubusercontent.com/litespeedtech/ls-cloud-image/master/Cloud-init/per-instance.sh )\n\n### Clean up ls tmp folder\nsudo rm -rf /tmp/lshttpd/*","user_defined_fields":[]},{"id":401709,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Minecraft: Java Edition One-Click","description":"Minecraft OCA","ordinal":10,"logo_url":"assets/Minecraft.svg","images":["linode/ubuntu20.04"],"deployments_total":20898,"deployments_active":331,"is_public":true,"mine":false,"created":"2019-03-08T21:13:32","updated":"2024-01-10T21:26:11","rev_note":"remove maxplayers hard coded options [oca-707]","script":"#!/usr/bin/env bash\n# Game config options:\n# https://minecraft.gamepedia.com/Server.properties\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n## Linode/SSH Security Settings - Required\n#\n#\n## Linode/SSH Settings - Optional\n#\n#\n\n# Enable logging for the StackScript\nset -xo pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Source the Linode Bash StackScript, API, and LinuxGSM Helper libraries\nsource \nsource \nsource \n\n# Source and run the New Linode Setup script for DNS/SSH configuration\n[ ! $USERNAME ] && USERNAME='lgsmuser'\nsource \n\n# Difficulty\n[[ \"$DIFFICULTY\" = \"Peaceful\" ]] && DIFFICULTY=0\n[[ \"$DIFFICULTY\" = \"Easy\" ]] && DIFFICULTY=1\n[[ \"$DIFFICULTY\" = \"Normal\" ]] && DIFFICULTY=2\n[[ \"$DIFFICULTY\" = \"Hard\" ]] && DIFFICULTY=3\n\n# Gamemode\n[[ \"$GAMEMODE\" = \"Survival\" ]] && GAMEMODE=0\n[[ \"$GAMEMODE\" = \"Creative\" ]] && GAMEMODE=1\n[[ \"$GAMEMODE\" = \"Adventure\" ]] && GAMEMODE=2\n[[ \"$GAMEMODE\" = \"Spectator\" ]] && GAMEMODE=3\n\n# Player Idle Timeout\n[[ \"$PLAYERIDLETIMEOUT\" = \"Disabled\" ]] && PLAYERIDLETIMEOUT=0\n\n# Minecraft-specific dependencies\ndebconf-set-selections <<< \"postfix postfix/main_mailer_type string 'No Configuration'\"\ndebconf-set-selections <<< \"postfix postfix/mailname string `hostname`\"\ndpkg --add-architecture i386\nsystem_install_package mailutils postfix curl netcat wget file bzip2 \\\n gzip unzip bsdmainutils python util-linux ca-certificates \\\n binutils bc jq tmux openjdk-17-jre dirmngr software-properties-common\n\n# Install LinuxGSM and Minecraft and enable the 'mcserver' service\nreadonly GAMESERVER='mcserver'\nv_linuxgsm_oneclick_install \"$GAMESERVER\" \"$USERNAME\"\n\n# Minecraft configurations\nsed -i s/server-ip=/server-ip=\"$IP\"/ /home/\"$USERNAME\"/serverfiles/server.properties\n\n# Customer config\nsed -i s/allow-flight=false/allow-flight=\"$ALLOWFLIGHT\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/allow-nether=true/allow-nether=\"$ALLOWNETHER\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/announce-player-achievements=true/announce-player-achievements=\"$ANNOUNCEPLAYERACHIEVEMENTS\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/difficulty=1/difficulty=\"$DIFFICULTY\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/enable-command-block=false/enable-command-block=\"$ENABLECOMMANDBLOCK\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/enable-query=true/enable-query=\"$ENABLEQUERY\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/force-gamemode=false/force-gamemode=\"$FORCEGAMEMODE\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/gamemode=0/gamemode=\"$GAMEMODE\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/generate-structures=true/generate-structures=\"$GENERATESTRUCTURES\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/hardcore=false/hardcore=\"$HARDCORE\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/level-name=world/level-name=\"$LEVELNAME\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/level-seed=/level-seed=\"$LEVELSEED\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/level-type=DEFAULT/level-type=\"$LEVELTYPE\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/max-build-height=256/max-build-height=\"$MAXBUILDHEIGHT\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/max-players=20/max-players=\"$MAXPLAYERS\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/max-tick-time=60000/max-tick-time=\"$MAXTICKTIME\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/max-world-size=29999984/max-world-size=\"$MAXWORLDSIZE\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/motd=.*/motd=\"$MOTD\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/network-compression-threshold=256/network-compression-threshold=\"$NETWORKCOMPRESSIONTHRESHOLD\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/op-permission-level=4/op-permission-level=\"$OPPERMISSIONLEVEL\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/player-idle-timeout=0/player-idle-timeout=\"$PLAYERIDLETIMEOUT\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/pvp=true/pvp=\"$PVP\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/resource-pack-sha1=/resource-pack-sha1=\"$RESOURCEPACKSHA1\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/server-port=25565/server-port=\"$PORT\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/snooper-enabled=true/snooper-enabled=\"$SNOOPERENABLED\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/spawn-animals=true/spawn-animals=\"$SPAWNANIMALS\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/spawn-monsters=true/spawn-monsters=\"$SPAWNMONSTERS\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/spawn-npcs=true/spawn-npcs=\"$SPAWNNPCS\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/use-native-transport=true/use-native-transport=\"$USENATIVETRANSPORT\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/view-distance=10/view-distance=\"$VIEWDISTANCE\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/rcon.password=*/rcon.password=\"\\\"$RCONPASSWORD\\\"\"/ /home/\"$USERNAME\"/serverfiles/server.properties\nsed -i s/enable-rcon=false/enable-rcon=true/ /home/\"$USERNAME\"/serverfiles/server.properties\n\n# Start the service and setup firewall\nufw allow \"$PORT\"\nufw allow \"25575\"\n\n# Start and enable the Minecraft service\nsystemctl start \"$GAMESERVER\".service\nsystemctl enable \"$GAMESERVER\".service\n\n# Cleanup\nstackscript_cleanup","user_defined_fields":[{"name":"levelname","label":"World Name","default":"world"},{"name":"motd","label":"Message of the Day","default":"Powered by Linode!"},{"name":"allowflight","label":"Flight Enabled","oneof":"true,false","default":"false"},{"name":"allownether","label":"Nether World Enabled","oneof":"true,false","default":"true"},{"name":"announceplayerachievements","label":"Player Achievements Enabled","oneof":"true,false","default":"true"},{"name":"maxplayers","label":"Maximum Players","default":"25"},{"name":"playeridletimeout","label":"Player Idle Timeout Limit","oneof":"Disabled,15,30,45,60","default":"Disabled"},{"name":"difficulty","label":"Difficulty Level","oneof":"Peaceful,Easy,Normal,Hard","default":"Easy"},{"name":"hardcore","label":"Hardcore Mode Enabled","oneof":"true,false","default":"false"},{"name":"pvp","label":"PvP Enabled","oneof":"true,false","default":"true"},{"name":"forcegamemode","label":"Force Game Mode Enabled","oneof":"true,false","default":"false"},{"name":"leveltype","label":"World Type","oneof":"DEFAULT,AMPLIFIED,FLAT,LEGACY","default":"DEFAULT"},{"name":"levelseed","label":"World Seed","default":""},{"name":"spawnanimals","label":"Spawn Animals Enabled","oneof":"true,false","default":"true"},{"name":"spawnmonsters","label":"Spawn Monsters Enabled","oneof":"true,false","default":"true"},{"name":"spawnnpcs","label":"Spawn NPCs Enabled","oneof":"true,false","default":"true"},{"name":"gamemode","label":"Game Mode","oneof":"Survival,Creative,Adventure,Spectator","default":"Survival"},{"name":"generatestructures","label":"Structure Generation Enabled","oneof":"true,false","default":"true"},{"name":"maxbuildheight","label":"Maximum Build Height","oneof":"50,100,200,256","default":"256"},{"name":"maxworldsize","label":"Maximum World Size","oneof":"100,1000,10000,100000,1000000,10000000,29999984","default":"29999984"},{"name":"viewdistance","label":"View Distance","oneof":"2,5,10,15,25,32","default":"10"},{"name":"enablecommandblock","label":"Command Block Enabled","oneof":"true,false","default":"false"},{"name":"enablequery","label":"Querying Enabled","oneof":"true,false","default":"true"},{"name":"enablercon","label":"Enable RCON","oneof":"true,false","default":"false"},{"name":"rconpassword","label":"RCON Password","default":""},{"name":"rconport","label":"RCON Port","default":"25575"},{"name":"maxticktime","label":"Maximum Tick Time","default":"60000"},{"name":"networkcompressionthreshold","label":"Network Compression Threshold","default":"256"},{"name":"oppermissionlevel","label":"Op-permission Level","oneof":"1,2,3,4","default":"4"},{"name":"port","label":"Port Number","default":"25565"},{"name":"snooperenabled","label":"Snooper Enabled","oneof":"true,false","default":"true"},{"name":"usenativetransport","label":"Use Native Transport Enabled","oneof":"true,false","default":"true"},{"name":"username","label":"The username for the Linode's non-root admin/SSH user(must be lowercase)","example":"lgsmuser"},{"name":"password","label":"The password for the Linode's non-root admin/SSH user","example":"S3cuReP@s$w0rd"},{"name":"pubkey","label":"The SSH Public Key used to securely access the Linode via SSH","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"}]},{"id":869129,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"aaPanel One-Click","description":"aaPanel One-Click","ordinal":11,"logo_url":"assets/aapanel.svg","images":["linode/centos7"],"deployments_total":5510,"deployments_active":311,"is_public":true,"mine":false,"created":"2021-07-20T18:50:46","updated":"2024-01-10T09:12:41","rev_note":"","script":"#!/bin/bash\n\n# Enable logging for the StackScript\nset -xo pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Yum Update\nyum update -y\n\n# Install aapanel\nyum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && echo y|bash install.sh aapanel\n\n# Log aaPanel login information\nbt default > /root/.aapanel_info\n\n# Stackscript Cleanup\nrm /root/StackScript\nrm /root/ssinclude*\necho \"Installation complete!\"","user_defined_fields":[]},{"id":923033,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Akaunting One-Click","description":"Akaunting One-Click","ordinal":12,"logo_url":"assets/akaunting.svg","images":["linode/ubuntu22.04"],"deployments_total":658,"deployments_active":23,"is_public":true,"mine":false,"created":"2021-10-18T01:01:19","updated":"2024-01-09T13:24:38","rev_note":"","script":"#!/bin/bash\n\n# \n# \n# \n# \n\n# \n# \n# \n# \n\n# Add Logging to /var/log/stackscript.log for future troubleshooting\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\nDEBIAN_FRONTEND=noninteractive apt-get update -qq >/dev/null\n\n###########################################################\n# Install NGINX\n###########################################################\napt-get install -y nginx\n\ncat <<'END' >/var/www/html/index.html\n\n \n \n \n \n \n\n Installing Akaunting\n\n \n \n\n \n \n\n \n \n \n \n \n\n \n \n \n \n Installing...Get back after 3 minutes!\n \n \n \n\nEND\n\nchown www-data:www-data /var/www/html/index.html\nchmod 644 /var/www/html/index.html\n\n###########################################################\n# MySQL\n###########################################################\napt install -y mariadb-server expect\n\nfunction mysql_secure_install {\n # $1 - required - Root password for the MySQL database\n [ ! -n \"$1\" ] && {\n printf \"mysql_secure_install() requires the MySQL database root password as its only argument\\n\"\n return 1;\n }\n local -r db_root_password=\"$1\"\n local -r secure_mysql=$(\nexpect -c \"\nset timeout 10\nspawn mysql_secure_installation\nexpect \\\"Enter current password for root (enter for none):\\\"\nsend \\\"$db_root_password\\r\\\"\nexpect \\\"Change the root password?\\\"\nsend \\\"n\\r\\\"\nexpect \\\"Remove anonymous users?\\\"\nsend \\\"y\\r\\\"\nexpect \\\"Disallow root login remotely?\\\"\nsend \\\"y\\r\\\"\nexpect \\\"Remove test database and access to it?\\\"\nsend \\\"y\\r\\\"\nexpect \\\"Reload privilege tables now?\\\"\nsend \\\"y\\r\\\"\nexpect eof\n\")\n printf \"$secure_mysql\\n\"\n}\n\n# Set DB root password\necho \"mysql-server mysql-server/root_password password ${DB_PASSWORD}\" | debconf-set-selections\necho \"mysql-server mysql-server/root_password_again password ${DB_PASSWORD}\" | debconf-set-selections\n\nmysql_secure_install \"$DB_PASSWORD\"\n\n# Create DB\necho \"CREATE DATABASE ${DB_NAME};\" | mysql -u root -p\"$DB_PASSWORD\"\n\n# create DB user with password\necho \"CREATE USER '$DBUSER'@'localhost' IDENTIFIED BY '$DBUSER_PASSWORD';\" | mysql -u root -p\"$DB_PASSWORD\"\n\necho \"GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DBUSER'@'localhost';\" | mysql -u root -p\"$DB_PASSWORD\"\necho \"FLUSH PRIVILEGES;\" | mysql -u root -p\"$DB_PASSWORD\"\n\n\n###########################################################\n# Install PHP \n###########################################################\napt-get install -y zip unzip php-mbstring php-zip php-gd php-cli php-curl php-intl php-imap php-xml php-xsl php-tokenizer php-sqlite3 php-pgsql php-opcache php-simplexml php-fpm php-bcmath php-ctype php-json php-pdo php-mysql\n\n###########################################################\n# Akaunting\n###########################################################\nmkdir -p /var/www/akaunting \\\n && curl -Lo /tmp/akaunting.zip 'https://akaunting.com/download.php?version=latest&utm_source=linode&utm_campaign=developers' \\\n && unzip /tmp/akaunting.zip -d /var/www/html \\\n && rm -f /tmp/akaunting.zip\n\ncat </var/www/html/.env\nAPP_NAME=Akaunting\nAPP_ENV=production\nAPP_LOCALE=en-GB\nAPP_INSTALLED=false\nAPP_KEY=\nAPP_DEBUG=false\nAPP_SCHEDULE_TIME=\"09:00\"\nAPP_URL=\n\nDB_CONNECTION=mysql\nDB_HOST=localhost\nDB_PORT=3306\nDB_DATABASE=${DB_NAME}\nDB_USERNAME=${DBUSER}\nDB_PASSWORD=${DBUSER_PASSWORD}\nDB_PREFIX=\n\nBROADCAST_DRIVER=log\nCACHE_DRIVER=file\nSESSION_DRIVER=file\nQUEUE_CONNECTION=sync\nLOG_CHANNEL=stack\n\nMAIL_MAILER=mail\nMAIL_HOST=localhost\nMAIL_PORT=2525\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\nMAIL_ENCRYPTION=null\nMAIL_FROM_NAME=null\nMAIL_FROM_ADDRESS=null\n\nFIREWALL_ENABLED=false\nEND\n\ncd /var/www/html && php artisan key:generate\n\n# Install Akaunting\nphp /var/www/html/artisan install --db-host=\"localhost\" --db-name=\"$DB_NAME\" --db-username=\"$DBUSER\" --db-password=\"$DBUSER_PASSWORD\" --company-name=\"$COMPANY_NAME\" --company-email=\"$COMPANY_EMAIL\" --admin-email=\"$ADMIN_EMAIL\" --admin-password=\"$ADMIN_PASSWORD\"\n\n# Fix permissions\nchown -Rf www-data:www-data /var/www/html\nfind /var/www/html/ -type d -exec chmod 755 {} \\;\nfind /var/www/html/ -type f -exec chmod 644 {} \\;\n\n###########################################################\n# Configure NGINX\n###########################################################\nPHP_VERSION=$(php -r \"echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;\")\ncat << END > /etc/nginx/nginx.conf\n# Generic startup file.\nuser www-data;\n\n#usually equal to number of CPUs you have. run command \"grep processor /proc/cpuinfo | wc -l\" to find it\nworker_processes auto;\nworker_cpu_affinity auto;\n\nerror_log /var/log/nginx/error.log;\npid /var/run/nginx.pid;\n\n# Keeps the logs free of messages about not being able to bind().\n#daemon off;\n\nevents {\nworker_connections 1024;\n}\n\nhttp {\n# rewrite_log on;\n\ninclude mime.types;\ndefault_type application/octet-stream;\naccess_log /var/log/nginx/access.log;\nsendfile on;\n# tcp_nopush on;\nkeepalive_timeout 64;\n# tcp_nodelay on;\n# gzip on;\n #php max upload limit cannot be larger than this \nclient_max_body_size 13m;\nindex index.php index.html index.htm;\n\n# Upstream to abstract backend connection(s) for PHP.\nupstream php {\n #this should match value of \"listen\" directive in php-fpm pool\n server unix:/run/php/php$PHP_VERSION-fpm.sock;\n server 127.0.0.1:9000;\n}\n\nserver {\n listen 80 default_server;\n\n server_name _;\n\n root /var/www/html;\n\n add_header X-Frame-Options \"SAMEORIGIN\";\n add_header X-XSS-Protection \"1; mode=block\";\n add_header X-Content-Type-Options \"nosniff\";\n\n index index.html index.htm index.php;\n\n charset utf-8;\n\n location / {\n try_files \\$uri \\$uri/ /index.php?\\$query_string;\n }\n\n # Prevent Direct Access To Protected Files\n location ~ \\.(env|log) {\n deny all;\n }\n\n # Prevent Direct Access To Protected Folders\n location ~ ^/(^app$|bootstrap|config|database|overrides|resources|routes|storage|tests|artisan) {\n deny all;\n }\n\n # Prevent Direct Access To modules/vendor Folders Except Assets\n location ~ ^/(modules|vendor)\\/(.*)\\.((?!ico|gif|jpg|jpeg|png|js\\b|css|less|sass|font|woff|woff2|eot|ttf|svg).)*$ {\n deny all;\n }\n\n error_page 404 /index.php;\n\n # Pass PHP Scripts To FastCGI Server\n location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)\\$;\n fastcgi_pass php;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME \\$document_root\\$fastcgi_script_name;\n include fastcgi_params;\n }\n\n location ~ /\\.(?!well-known).* {\n deny all;\n }\n}\n}\nEND\n\n# Remove installation screen\nrm -f /var/www/html/index.html\n\nservice nginx reload\n\n###########################################################\n# Firewall\n###########################################################\napt-get install ufw -y\nufw limit ssh\nufw allow http\nufw allow https\n\nufw --force enable\n\n###########################################################\n# Stackscript cleanup\n###########################################################\nrm /root/StackScript\nrm /root/ssinclude*\necho \"Installation complete!\"","user_defined_fields":[{"name":"company_name","label":"Company Name","example":"My Company"},{"name":"company_email","label":"Company Email","example":"my@company.com"},{"name":"admin_email","label":"Admin Email","example":"my@company.com"},{"name":"admin_password","label":"Admin Password","example":"s3cur39a55w0r0"},{"name":"db_name","label":"MySQL Database Name","example":"akaunting"},{"name":"db_password","label":"MySQL root Password","example":"s3cur39a55w0r0"},{"name":"dbuser","label":"MySQL Username","example":"akaunting"},{"name":"dbuser_password","label":"MySQL User Password","example":"s3cur39a55w0r0"}]},{"id":985374,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Ant Media Server: Enterprise Edition One-Click","description":"Ant Media Enterprise Edition One-Click","ordinal":13,"logo_url":"assets/antmediaserver.svg","images":["linode/ubuntu20.04"],"deployments_total":1423,"deployments_active":66,"is_public":true,"mine":false,"created":"2022-03-08T17:39:39","updated":"2024-01-09T13:16:50","rev_note":"","script":"#!/usr/bin/env bash\n\nset -x\n## REQUIRED IN EVERY MARKETPLACE SUBMISSION\n# Add Logging to /var/log/stackscript.log for future troubleshooting\nexec 1> >(tee -a \"/var/log/stackscript.log\") 2>&1\n# System Updates updates\napt-get -o Acquire::ForceIPv4=true update -y\n## END OF REQUIRED CODE FOR MARKETPLACE SUBMISSION\n\nZIP_FILE=\"https://antmedia.io/linode/antmedia_2.5.3.zip\"\nINSTALL_SCRIPT=\"https://raw.githubusercontent.com/ant-media/Scripts/master/install_ant-media-server.sh\"\n\nwget -q --no-check-certificate $ZIP_FILE -O /tmp/antmedia.zip && wget -q --no-check-certificate $INSTALL_SCRIPT -P /tmp/\n\nif [ $? == \"0\" ]; then\n bash /tmp/install_ant-media-server.sh -i /tmp/antmedia.zip\nelse\n logger \"There is a problem in installing the ant media server. Please send the log of this console to contact@antmedia.io\"\n exit 1\nfi","user_defined_fields":[]},{"id":804144,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Ant Media Server: Community Edition One-Click","description":"Ant Media Server One-Click","ordinal":14,"logo_url":"assets/antmediaserver.svg","images":["linode/ubuntu20.04"],"deployments_total":5786,"deployments_active":447,"is_public":true,"mine":false,"created":"2021-04-01T12:50:57","updated":"2024-01-10T18:39:12","rev_note":"","script":"#!/usr/bin/env bash \n\n## Enable logging\nset -o pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\nZIP_FILE=\"https://github.com/ant-media/Ant-Media-Server/releases/download/ams-v2.5.3/ant-media-server-community-2.5.3.zip\"\n\n\nINSTALL_SCRIPT=\"https://raw.githubusercontent.com/ant-media/Scripts/master/install_ant-media-server.sh\"\n\nwget -q --no-check-certificate $ZIP_FILE -O /tmp/antmedia.zip && wget -q --no-check-certificate $INSTALL_SCRIPT -P /tmp/\n\nif [ $? == \"0\" ]; then\n bash /tmp/install_ant-media-server.sh -i /tmp/antmedia.zip\nelse\n logger \"There is a problem in installing the ant media server. Please send the log of this console to contact@antmedia.io\"\n exit 1\nfi","user_defined_fields":[]},{"id":1102900,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Apache Airflow One-Click","description":"Apache Airflow One-Click App","ordinal":15,"logo_url":"assets/apacheairflow.svg","images":["linode/ubuntu20.04"],"deployments_total":129,"deployments_active":4,"is_public":true,"mine":false,"created":"2022-12-20T17:32:08","updated":"2024-01-02T20:07:21","rev_note":"","script":"#!/bin/bash\n#\n# \n## Linode/SSH Security Settings\n#\n#\n#\n#\n## Domain Settings\n#\n#\n#\n## Enable logging\n\nset -x\n## REQUIRED IN EVERY MARKETPLACE SUBMISSION\n# Add Logging to /var/log/stackscript.log for future troubleshooting\nexec 1> >(tee -a \"/var/log/stackscript.log\") 2>&1\n# System Updates updates\napt-get -o Acquire::ForceIPv4=true update -y\n## END OF REQUIRED CODE FOR MARKETPLACE SUBMISSION\n\n## Import the Bash StackScript Library\nsource \n## Import the DNS/API Functions Library\nsource \n## Import the OCA Helper Functions\nsource \n## Run initial configuration tasks (DNS/SSH stuff, etc...)\nsource \n\n## Register default rDNS \nexport DEFAULT_RDNS=$(dnsdomainname -A | awk '{print $1}')\n\n#set absolute domain if any, otherwise use DEFAULT_RDNS\nif [[ $DOMAIN = \"\" ]]; then\n readonly ABS_DOMAIN=\"$DEFAULT_RDNS\"\nelif [[ $SUBDOMAIN = \"\" ]]; then\n readonly ABS_DOMAIN=\"$DOMAIN\"\nelse\n readonly ABS_DOMAIN=\"$SUBDOMAIN.$DOMAIN\"\nfi\n\ncreate_a_record $SUBDOMAIN $IP $DOMAIN\n\n# install depends\nexport DEBIAN_FRONTEND=noninteractive\nsudo apt update\n#sudo apt -y upgrade\nsudo apt install -y python3-pip\nsudo apt install -y build-essential libssl-dev libffi-dev python3-dev\nsudo apt install -y python3-venv # One of the Airflow examples requires virtual environments\n\nexport AIRFLOW_HOME=~/airflow\n\n# Install Airflow using the constraints file\nAIRFLOW_VERSION=2.4.1\nPYTHON_VERSION=\"$(python3 --version | cut -d \" \" -f 2 | cut -d \".\" -f 1-2)\"\n# For example: 3.7\nCONSTRAINT_URL=\"https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt\"\n# For example: https://raw.githubusercontent.com/apache/airflow/constraints-2.4.1/constraints-3.7.txt\npip install \"apache-airflow==${AIRFLOW_VERSION}\" --constraint \"${CONSTRAINT_URL}\"\n\n# The Standalone command will initialise the database, make a user,\n# and start all components for you.\nairflow standalone &\n\n###\n# \n# systemd unit file and per component settings go here\n# \n### \n\n\n## install nginx reverse-proxy \napt install nginx -y \n\n#configure nginx reverse proxy\nrm /etc/nginx/sites-enabled/default\ntouch /etc/nginx/sites-available/reverse-proxy.conf\ncat < /etc/nginx/sites-available/reverse-proxy.conf\nserver {\n listen 80;\n listen [::]:80;\n server_name ${DEFAULT_RDNS};\n\n access_log /var/log/nginx/reverse-access.log;\n error_log /var/log/nginx/reverse-error.log;\n\n location / {\n proxy_pass http://localhost:8080;\n proxy_set_header Host \\$host;\n proxy_set_header X-Real-IP \\$remote_addr;\n proxy_set_header X-Forward-For \\$proxy_add_x_forwarded_for;\n }\n}\nEND\nln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf\n\n#enable and start nginx\nsystemctl enable nginx\nsystemctl restart nginx \n\n## UFW rules \nufw allow http \nufw allow https \nsystemctl enable ufw\n\nsleep 60 \n\n## install SSL certs. required \npip install pyOpenSSL --upgrade\napt install python3-certbot-nginx -y \ncertbot run --non-interactive --nginx --agree-tos --redirect -d ${ABS_DOMAIN} -m ${SOA_EMAIL_ADDRESS} -w /var/www/html/\n\n## write some login details\nexport ADMIN_PASS=$(cat /root/airflow/standalone_admin_password.txt)\ncat < /etc/motd \nThe installation of Apache Airflow is now complete, and the application is running in standalone mode.\n#\nYou can log into the Airflow GUI at ${ABS_DOMAIN}\nWith the credentials: \nUsername: admin\nPassword: ${ADMIN_PASS}\n#\nStandalone mode is not recommended for production.\nEND\n\nstackscript_cleanup","user_defined_fields":[{"name":"soa_email_address","label":"Email address (for the Let's Encrypt SSL certificate)","example":"user@domain.tld"},{"name":"username","label":"The limited sudo user to be created for the Linode.","default":""},{"name":"password","label":"The password for the limited sudo user","example":"an0th3r_s3cure_p4ssw0rd","default":""},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"token_password","label":"Your Linode API token. This is needed to create your Linode's DNS records","default":""},{"name":"subdomain","label":"Subdomain","example":"The subdomain for the DNS record: www (Requires Domain)","default":""},{"name":"domain","label":"Domain","example":"The domain for the DNS record: example.com (Requires API token)","default":""}]},{"id":1160820,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Appwrite One-Click","description":"Appwrite One-Click ","ordinal":16,"logo_url":"assets/appwrite.svg","images":["linode/ubuntu22.04"],"deployments_total":199,"deployments_active":14,"is_public":true,"mine":false,"created":"2023-04-21T13:09:13","updated":"2024-01-09T18:28:28","rev_note":"","script":"#!/bin/bash\n### linode \n## Enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# install docker\ncurl -fsSL https://get.docker.com -o get-docker.sh\nbash ./get-docker.sh\n\n# install haveged\nsudo apt-get install -y haveged\n\n# Install Appwrite\n# Grab latest version\nappversion=$(curl -s https://api.github.com/repos/appwrite/appwrite/releases/latest | grep -oP '\"tag_name\": \"\\K.*?(?=\")')\n\ndocker run --rm \\\n --volume /var/run/docker.sock:/var/run/docker.sock \\\n --volume \"$(pwd)\"/appwrite:/usr/src/code/appwrite:rw \\\n appwrite/appwrite:$appversion sh -c \"install --httpPort=80 --httpsPort=443 --interactive=N\"\n\necho \"Installation complete!\"","user_defined_fields":[]},{"id":401699,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Ark One-Click","description":"Ark - Latest One-Click","ordinal":17,"logo_url":"assets/Ark@1x.svg","images":["linode/debian11"],"deployments_total":1153,"deployments_active":4,"is_public":true,"mine":false,"created":"2019-03-08T21:05:54","updated":"2023-12-29T06:29:50","rev_note":"Remove SSH Pubkey UDF","script":"#!/bin/bash\n#\n#\n#\n#\n#\n#\n#\n#\n\nsource \nsource \nsource \nsource \n\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\nset -o pipefail\n\nGAMESERVER=\"arkserver\"\n\nset_hostname\napt_setup_update\n\n\n# ARK specific dependencies\ndebconf-set-selections <<< \"postfix postfix/main_mailer_type string 'No Configuration'\"\ndebconf-set-selections <<< \"postfix postfix/mailname string `hostname`\"\ndpkg --add-architecture i386\napt update\nsudo apt -q -y install mailutils postfix \\\ncurl wget file bzip2 gzip unzip bsdmainutils \\\npython util-linux ca-certificates binutils bc \\\njq tmux lib32gcc-s1 libstdc++6 libstdc++6:i386 \n\n# Install linuxGSM\nlinuxgsm_install\n\n# Install ARK\ngame_install\n\n# Setup crons and create systemd service file\nservice_config\n\n#Game Config Options\n\nsed -i s/XPMultiplier=.*/XPMultiplier=\"$XPMULTIPLIER\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\nsed -i s/ServerPassword=.*/ServerPassword=\"$SERVERPASSWORD\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\nsed -i s/ServerHardcore=.*/ServerHardcore=\"$SERVERPASSWORD\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\nsed -i s/ServerPVE=.*/ServerPVE=\"$SERVERPVE\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\nsed -i s/Message=.*/Message=\"$MOTD\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\nsed -i s/SessionName=.*/SessionName=\"$SESSIONNAME\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\nsed -i s/ServerAdminPassword=.*/ServerAdminPassword=\"\\\"$RCONPASSWORD\\\"\"/ /home/arkserver/serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini\n\n\n# Start the service and setup firewall\nufw_install\nufw allow 27015/udp\nufw allow 7777:7778/udp\nufw allow 27020/tcp\nufw enable\nfail2ban_install\nsystemctl start \"$GAMESERVER\".service\nsystemctl enable \"$GAMESERVER\".service\nstackscript_cleanup","user_defined_fields":[{"name":"rconpassword","label":"RCON password"},{"name":"sessionname","label":"Server Name","default":"Ark Server"},{"name":"motd","label":"Message of the Day","default":"Powered by Linode!"},{"name":"serverpassword","label":"Server Password","default":""},{"name":"hardcore","label":"Hardcore Mode Enabled","oneof":"True,False","default":"False"},{"name":"xpmultiplier","label":"XP Multiplier","oneof":"1,1.5,2,5,10,20","default":"2"},{"name":"serverpve","label":"Server PvE","oneof":"True,False","default":"False"}]},{"id":662118,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Azuracast One-Click","description":"AzuraCast One-Click","ordinal":18,"logo_url":"assets/azuracast.svg","images":["linode/debian10","linode/ubuntu20.04"],"deployments_total":2755,"deployments_active":198,"is_public":true,"mine":false,"created":"2020-08-12T15:50:09","updated":"2024-01-09T19:03:45","rev_note":"","script":"#!/bin/bash\n\nsource \nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Set hostname, apt configuration and update/upgrade\nset_hostname\napt_setup_update\n\n# Install GIT\napt-get update && apt-get install -q -y git\n# Cloning AzuraCast and install\nmkdir -p /var/azuracast\ncd /var/azuracast\ncurl -fsSL https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker.sh > docker.sh\nchmod a+x docker.sh\nyes 'Y' | ./docker.sh setup-release\nyes '' | ./docker.sh install\n\n# Cleanup\nstackscript_cleanup","user_defined_fields":[]},{"id":913277,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"BeEF One-Click","description":"BeEF One-Click","ordinal":19,"logo_url":"assets/beef.svg","images":["linode/ubuntu22.04"],"deployments_total":30932,"deployments_active":1076,"is_public":true,"mine":false,"created":"2021-09-30T18:28:58","updated":"2024-01-10T21:38:51","rev_note":"","script":"#!/bin/bash\n#\n# Script to install BEEF on Linode\n# \n# \n## Linode/SSH Security Settings\n#\n#\n#\n#\n## Domain Settings\n#\n#\n#\n## Enable logging\nset -o pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n## Import the Bash StackScript Library\nsource \n## Import the DNS/API Functions Library\nsource \n## Import the OCA Helper Functions\nsource \n## Run initial configuration tasks (DNS/SSH stuff, etc...)\nsource \nbeef_config=\"/home/beef/config.yaml\"\nkey=\"privkey.pem\"\ncert=\"fullchain.pem\"\n# System Update\napt_setup_update\n# UFW\nufw allow 80\nufw allow 443\nufw allow 3000\nfunction configure_nginx {\n apt install git nginx ruby-dev -y\n # NGINX\n mkdir -p /var/www/certs/.well-known\n chown -R www-data:www-data /var/www/certs/\n cat < /etc/nginx/sites-available/$FQDN\nserver {\n listen 80;\n listen [::]:80;\n server_name $FQDN;\n root /var/www/certs;\n location / {\n try_files \\$uri \\$uri/ =404;\n }\n# allow .well-known\n location ^~ /.well-known {\n allow all;\n auth_basic off;\n alias /var/www/certs/.well-known;\n }\n}\nEOF\n ln -s /etc/nginx/sites-available/$FQDN /etc/nginx/sites-enabled/$FQDN\n unlink /etc/nginx/sites-enabled/default\n systemctl restart nginx\n}\nfunction configure_ssl {\n apt install certbot python3-certbot-nginx -y\n certbot_ssl \"$FQDN\" \"$SOA_EMAIL_ADDRESS\" 'nginx'\n}\nfunction create_beef_user {\n function create_beef {\n groupadd --system beef\n useradd -s /sbin/nologin --system -g beef beef\n }\n grep beef /etc/passwd\n if [ $? -eq 1 ];then\n create_beef\n else\n echo \"[INFO] beef already on the system. Deleting user\"\n deluser --remove-home beef\n create_beef\n fi\n}\nfunction configure_beef {\n git clone https://github.com/beefproject/beef.git /home/beef\n chown -R beef: /home/beef\n cd /home/beef\n cp /etc/letsencrypt/live/$FQDN/$key .\n cp /etc/letsencrypt/live/$FQDN/$cert .\n # get line number to replace\n get_https_enable=$(grep -n -C 10 \"key:\" $beef_config | grep -v \"#\" | grep \"https:\" -A 5 | grep \"enable:\" | awk -F \"-\" {'print $1'})\n get_https_public_enabled=$(grep -n -C 10 \"key:\" $beef_config | grep -v \"#\" | grep \"https:\" -A 5 | grep \"public_enabled:\" | awk -F \"-\" {'print $1'})\n # replacing line numebr\n sed -i \"\"$get_https_enable\"s/enable: false/enable: true/\" $beef_config\n sed -i \"\"$get_https_public_enabled\"s/public_enabled: false/public_enabled: true/\" $beef_config\n sed -i \"/key:/c\\ key: \\\"$key\\\"\" $beef_config\n sed -i \"/cert:/c\\ cert: \\\"$cert\\\"\" $beef_config\n # creds\n #sed -i \"/user:/c\\ user: \\\"beef\\\"\" $beef_config\n sed -i \"/passwd:/c\\ passwd: \\\"$BEEFPASSWORD\\\"\" $beef_config\n # install local copy of beef\n # install deps\n apt install curl git build-essential openssl libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libc6-dev libncurses5-dev automake libtool bison nodejs libcurl4-openssl-dev ruby-dev -y\n su - -s /bin/bash beef\n bundle3.0 config set --local path /home/beef/.gem\n bundle3.0 install\n gem install --user-install xmlrpc\n \n}\nfunction beef_startup {\n cat < /home/beef/start_beef\n#!/bin/bash\nfunction start_beef {\n cd /home/beef\n echo no | ./beef\n}\nstart_beef\nEOF\n chown -R beef:beef /home/beef\n chmod +x /home/beef/start_beef\n}\n \nfunction beef_job {\n cat < /etc/systemd/system/beef.service\n[Unit]\nDescription=Browser Exploitation Framework\nWants=network-online.target\nAfter=network-online.target\n[Service]\nUser=beef\nGroup=beef\nExecStart=/home/beef/start_beef\n[Install]\nWantedBy=default.target\nEOF\n systemctl daemon-reload\n systemctl start beef\n systemctl enable beef\n}\nfunction ssl_renew_cron {\n cat </root/certbot-beef-renewal.sh\n#!/bin/bash\n#\n# Script to handle Certbot renewal & BeEf\n# Debug\n# set -xo pipefail\nexport BEEF_FULL=/home/beef/fullchain.pem\nexport BEEF_PRIVKEY=/home/beef/privkey.pem\nexport FULLCHAIN=/etc/letsencrypt/live/$FQDN/fullchain.pem\nexport PRIVKEY=/etc/letsencrypt/live/$FQDN/privkey.pem\ncertbot renew\ncat \\$FULLCHAIN > \\$BEEF_FULL\ncat \\$PRIVKEY > \\$BEEF_PRIVKEY\nservice beef reload\nEND\n chmod +x /root/certbot-beef-renewal.sh\n# Setup Cron\n crontab -l > cron\n echo \"* 1 * * 1 bash /root/certbot-beef-renewal.sh\" >> cron\n crontab cron\n rm cron\n}\nfunction install_complete {\n cat < /root/beef.info\n##############################\n# BEEF INSTALLATION COMPLETE #\n##############################\nEndpoint: https://$FQDN:3000/ui/panel\nCredentials can be found here:\n/home/beef/config.yaml\nHappy hunting!\nEOF\n}\nfunction main {\n create_beef_user\n configure_nginx\n configure_ssl\n configure_beef\n beef_startup\n beef_job\n ssl_renew_cron\n install_complete\n}\nmain\n# Clean up\nstackscript_cleanup\ncat /root/beef.info","user_defined_fields":[{"name":"beefpassword","label":"BEEF Password"},{"name":"soa_email_address","label":"Email address (for the Let's Encrypt SSL certificate)","example":"user@domain.tld"},{"name":"username","label":"The limited sudo user to be created for the Linode. The username cannot contain any spaces or capitol letters. For this application the username 'beef' is reserved for the application, so please choose an alternative username for this deployment.","default":""},{"name":"password","label":"The password for the limited sudo user","example":"an0th3r_s3cure_p4ssw0rd","default":""},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"token_password","label":"Your Linode API token. This is needed to create your WordPress server's DNS records","default":""},{"name":"subdomain","label":"Subdomain","example":"The subdomain for the DNS record: www (Requires Domain)","default":""},{"name":"domain","label":"Domain","example":"The domain for the DNS record: example.com (Requires API token)","default":""}]},{"id":923034,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"BitNinja One-Click","description":"BitNinja One-Click","ordinal":20,"logo_url":"assets/bitninja.svg","images":["linode/centos7","linode/debian10","linode/ubuntu20.04","linode/debian11"],"deployments_total":37,"deployments_active":0,"is_public":true,"mine":false,"created":"2021-10-18T01:03:02","updated":"2023-12-31T17:37:27","rev_note":"","script":"#!bin/bash\n\n# \n\n## Enable logging\nset -o pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\nwget -qO- https://get.bitninja.io/install.sh | /bin/bash -s - --license_key=\"$license_key\" -y","user_defined_fields":[{"name":"license_key","label":"License Key"}]},{"id":1037036,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Budibase One-Click","description":"Budibase One Click App","ordinal":21,"logo_url":"assets/budibase.svg","images":["linode/debian11","linode/ubuntu22.04"],"deployments_total":455,"deployments_active":20,"is_public":true,"mine":false,"created":"2022-08-02T18:42:41","updated":"2024-01-10T17:24:07","rev_note":"","script":"#!/bin/bash\n#\n\nsource \nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Set hostname, configure apt and perform update/upgrade\nset_hostname\napt_setup_update\n\n# Install the dependencies & add Docker to the APT repository\napt install -y apt-transport-https ca-certificates curl software-properties-common gnupg2 pwgen ufw\ncurl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -\nadd-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable\"\n\n# Update & install Docker-CE\napt_setup_update\napt install -y docker.io\n\n# Check to ensure Docker is running and installed correctly\nsystemctl status docker\ndocker -v\n\n# Install Docker Compose\ncurl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose\nchmod +x /usr/local/bin/docker-compose\ndocker-compose --version\n\necho \"Creating passwords for /opt/budibase/.env\"\nVAR_JWT_SECRET=$(pwgen 16)\nVAR_MINIO_ACCESS_KEY=$(pwgen 16)\nVAR_MINIO_SECRET_KEY=$(pwgen 16)\nVAR_COUCH_DB_PASSWORD=$(pwgen 16)\nVAR_REDIS_PASSWORD=$(pwgen 16)\nVAR_INTERNAL_API_KEY=$(pwgen 16)\nIP=`hostname -I | awk '{print$1}'`\n\nmkdir -p /opt/budibase\ncd /opt/budibase\necho \"Fetch budibase docker compose file\"\ncurl -L https://raw.githubusercontent.com/Budibase/budibase/master/hosting/docker-compose.yaml -o /opt/budibase/docker-compose.yml\necho \"Fetch budibase .env template\"\ncurl -L https://raw.githubusercontent.com/Budibase/budibase/master/hosting/.env -o /opt/budibase/.env\necho \"Set passwords in /opt/budibase/.env\"\nsed -i \"s/JWT_SECRET=testsecret/JWT_SECRET=$VAR_JWT_SECRET/\" /opt/budibase/.env\nsed -i \"s/MINIO_ACCESS_KEY=budibase/MINIO_ACCESS_KEY=$VAR_MINIO_ACCESS_KEY/\" /opt/budibase/.env\nsed -i \"s/MINIO_SECRET_KEY=budibase/MINIO_SECRET_KEY=$VAR_MINIO_SECRET_KEY/\" /opt/budibase/.env\nsed -i \"s/COUCH_DB_PASSWORD=budibase/COUCH_DB_PASSWORD=$VAR_COUCH_DB_PASSWORD/\" /opt/budibase/.env\nsed -i \"s/REDIS_PASSWORD=budibase/REDIS_PASSWORD=$VAR_REDIS_PASSWORD/\" /opt/budibase/.env\nsed -i \"s/INTERNAL_API_KEY=budibase/INTERNAL_API_KEY=$VAR_INTERNAL_API_KEY/\" /opt/budibase/.env\nsed -i \"s/MAIN_PORT=10000/MAIN_PORT=$BBPORT/\" /opt/budibase/.env\ndocker-compose up -d\n\ncat </etc/profile.d/budibase_welcome.sh\n#!/bin/sh\n#\nIP=$(hostname -I | awk '{print$1}')\necho \"\n********************************************************************************\nWelcome to Budibase!\nTo help keep this server secure, the UFW firewall is enabled.\nAll ports are BLOCKED except 22 (SSH) and the Web UI port $BBPORT.\n********************************************************************************\n # Budibase UI: http://$IP:$BBPORT/\n # Website: https://budibase.com\n # Documentation: https://docs.budibase.com\n # Github: https://github.com/Budibase/budibase\n # Community Support: https://github.com/Budibase/budibase/discussions\n # Restart Budibase: cd /opt/budibase; docker-compose down; docker-compose up -d\n # Budibase config: /etc/budibase/.env\n\"\nEND\nchmod +x /etc/profile.d/budibase_welcome.sh\n# Enable UFW and add some rules to it\nufw enable\nufw limit ssh/tcp comment 'Rate limit the SSH port'\nufw allow $BBPORT/tcp comment \"TCP Listen port for Budibase\"\nufw --force enable\n\n# Cleanup\nstackscript_cleanup","user_defined_fields":[{"name":"BBPORT","label":"Budibase Port","example":"Default: 80","default":"80"}]},{"id":869155,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Chevereto One-Click","description":"Chevereto One-Click","ordinal":22,"logo_url":"assets/chevereto.svg","images":["linode/ubuntu20.04"],"deployments_total":241,"deployments_active":6,"is_public":true,"mine":false,"created":"2021-07-20T19:07:56","updated":"2024-01-10T18:25:18","rev_note":"","script":"#!/usr/bin/env bash\n# https://github.com/chevereto/linode-marketplace\n\nset -e\n\nCHEVERETO_INSTALLER_TAG=\"3.1.0\"\nWORKING_DIR=\"/var/www/html\"\n\n## REQUIRED IN EVERY MARKETPLACE SUBMISSION\n# Add Logging to /var/log/stackscript.log for future troubleshooting\nexec 1> >(tee -a \"/var/log/stackscript.log\") 2>&1\n\n## 03-force-ssh-logout.sh\ncat >>/etc/ssh/sshd_config </dev/null\napt install -y apache2 libapache2-mod-php\napt install -y mysql-server\napt install -y php\napt install -y php-{common,cli,curl,fileinfo,gd,imagick,intl,json,mbstring,mysql,opcache,pdo,pdo-mysql,xml,xmlrpc,zip}\napt install -y python3-certbot-apache software-properties-common unzip\n\n# 01-fs.sh\ncat >/etc/apache2/sites-available/000-default.conf <\n \n Options Indexes FollowSymLinks\n AllowOverride All\n Require all granted\n \n ServerAdmin webmaster@localhost\n DocumentRoot /var/www/html\n ErrorLog \\${APACHE_LOG_DIR}/error.log\n CustomLog \\${APACHE_LOG_DIR}/access.log combined\n\nEOM\n\ncat >/etc/update-motd.d/99-one-click < certbot --apache -d example.com -d www.example.com\nIMPORTANT:\n * After connecting to the server for the first time, immediately install\n Chevereto at http://\\$myip/installer.php\n * Secure your database by running:\n > mysql_secure_installation\n * Setup email delivery at http://\\$myip/dashboard/settings/email\nFor help and more information visit https://chevereto.com\n********************************************************************************\nTo delete this message of the day: rm -rf \\$(readlink -f \\${0})\nEOF\nEOM\nchmod +x /etc/update-motd.d/99-one-click\n\ncat >/etc/cron.d/chevereto </etc/php/7.4/apache2/conf.d/chevereto.ini <>/var/log/per-instance.log\n\nMYSQL_ROOT_PASS=$(openssl rand -hex 16)\nDEBIAN_SYS_MAINT_MYSQL_PASS=$(openssl rand -hex 16)\n\nCHEVERETO_DB_HOST=localhost\nCHEVERETO_DB_PORT=3306\nCHEVERETO_DB_NAME=chevereto\nCHEVERETO_DB_USER=chevereto\nCHEVERETO_DB_PASS=$(openssl rand -hex 16)\n\ncat >/root/.mysql_password <>/etc/apache2/envvars </etc/mysql/debian.cnf <>/var/log/per-instance.log\n\necho \"[OK] Chevereto Installer $CHEVERETO_INSTALLER_TAG provisioned!\"","user_defined_fields":[]},{"id":869158,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"ClusterControl One-Click","description":"ClusterControl One-Click","ordinal":23,"logo_url":"assets/clustercontrol.svg","images":["linode/ubuntu20.04"],"deployments_total":177,"deployments_active":2,"is_public":true,"mine":false,"created":"2021-07-20T19:13:44","updated":"2023-12-29T17:52:35","rev_note":"","script":"#!/usr/bin/env bash\n\n### UDF Variables\n\n## Severalnines settings\n#\n#\n\n## Domain settings\n#\n#\n#\n#\n\n## Let's Encrypt SSL\n#\n\n### Logging and other debugging helpers\n\n# Enable logging for the StackScript\nset -o pipefail\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Source the Linode Bash StackScript, API, and LinuxGSM Helper libraries\nsource \nsource \n\n# Source and run the New Linode Setup script for DNS/SSH configuration\nsource \n\n# System Update\nsystem_update\n\nworkdir=/tmp\nIP=`hostname -I | awk '{print$1}'`\n# if command -v dig &>/dev/null; then\n# echo -e \"\\nDetermining network interfaces.\" \n# ext_ip=$(dig +short myip.opendns.com @resolver1.opendns.com 2>/dev/null)\n# [[ ! -z $ext_ip ]] && IP=${ext_ip}\n# fi\nlog_progress() {\n\n echo \"$1\" >> /root/cc_install.log\n}\n\ninstall_cc() {\n export HOME=/root\n export USER=root\n wget --no-check-certificate https://severalnines.com/downloads/cmon/install-cc\n chmod +x install-cc\n echo \"mysql cmon password = $CMONUSER_PASSWORD\" >> /root/.cc_passwords\n echo \"mysql root password = $DBROOT_PASSWORD\" >> /root/.cc_passwords\n SEND_DIAGNOSTICS=0 S9S_CMON_PASSWORD=$CMONUSER_PASSWORD S9S_ROOT_PASSWORD=$DBROOT_PASSWORD INNODB_BUFFER_POOL_SIZE=256 ./install-cc\n}\n\nfirstboot() {\n hostnamectl set-hostname clustercontrol\n\n ssh-keygen -b 2048 -t rsa -f /root/.ssh/id_rsa -q -N \"\"\n ssh-keygen -y -f /root/.ssh/id_rsa > /root/.ssh/id_rsa.pub\n SSH_KEY=$(cat /root/.ssh/id_rsa.pub)\n\n cat < /etc/update-motd.d/99-cc-motd \n#!/bin/sh\necho \"###\"\necho \"\"\necho \"Welcome to Severalnines Database Monitoring and Management Application - ClusterControl\"\necho \"Open your web browser to http://${IP}/clustercontrol to access ClusterControl's web application\"\necho \"\"\necho \"The public SSH key (root) is:\"\necho \"$SSH_KEY\"\necho \"\"\necho \"###\"\nEND\n\n chmod +x /etc/update-motd.d/99-cc-motd\n}\n\nenable_fw() {\n ufw default deny incoming\n ufw default allow outgoing\n ufw allow ssh\n ufw allow http\n ufw allow https\n ufw allow 9999\n ufw allow 9501\n}\n\ncleanup() {\n rm -rf /tmp/* /var/tmp/* /root/scripts\n history -c\n cat /dev/null > /root/.bash_history\n unset HISTFILE\n\n apt-get -y autoremove\n apt-get -y autoclean\n\n cat /dev/null > /var/log/lastlog; cat /dev/null > /var/log/wtmp; cat /dev/null > /var/log/auth.log\n\n ufw enable\n ufw status\n\n touch /.cc-provisioned\n}\n\nlog_progress \"** Installing ClusterControl, this could take several minutes. Please wait ...\"\ninstall_cc\nlog_progress \"** Setting motd ...\"\nfirstboot\nlog_progress \"** Enabling firewall ...\"\nenable_fw\nif [[ \"$SSL\" == \"Yes\" ]]; then\n log_progress \"** Enabling Let's Encrypt SSL ...\"\n python --version | grep -q 3.\n [[ $? -eq 0 ]] && PYTHON3=1\n if [[ -n $PYTHON3 ]]; then\n apt install -y certbot python3-certbot-apache\n else\n apt install -y certbot python-certbot-apache\n fi\n\n certbot_ssl \"$FQDN\" \"$SOA_EMAIL_ADDRESS\" 'apache'\nfi\ncleanup\n\n# Clean up\nlog_progress \"** Stackscript cleanup please wait ...\"\nstackscript_cleanup\n\nlog_progress \"** Installation successful...\"\n/etc/update-motd.d/99-cc-motd | tee -a /root/cc_install.log\n\nsystemctl restart sshd","user_defined_fields":[{"name":"dbroot_password","label":"MySQL Root Password"},{"name":"cmonuser_password","label":"CMON user password"},{"name":"token_password","label":"Your Linode API token. This is required in order to create DNS records.","default":""},{"name":"subdomain","label":"The subdomain for the Linode's DNS record (Requires API token)","default":""},{"name":"domain","label":"The domain for the Linode's DNS record (Requires API token)","default":""},{"name":"soa_email_address","label":"E-Mail Address","example":"Your email address"},{"name":"ssl","label":"Would you like to use a free Let's Encrypt SSL certificate? (Uses the Linode's default rDNS if no domain is specified above)","oneof":"Yes,No","default":"Yes"}]},{"id":401700,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"CS:GO One-Click","description":"CS:GO - Latest One-Click","ordinal":24,"logo_url":"assets/CSGO2.svg","images":["linode/debian11","linode/ubuntu22.04"],"deployments_total":2142,"deployments_active":6,"is_public":true,"mine":false,"created":"2019-03-08T21:06:26","updated":"2023-11-02T20:39:58","rev_note":"Remove SSH Pubkey UDF","script":"#!/bin/bash\n#\n\n#\n#\n#\n#\n#\n#\n#\n#\n#\n#\n\nsource \nsource \nsource \nsource \n\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\nset -o pipefail\n\nGAMESERVER=\"csgoserver\"\n\n### UDF to config\n\n#Autoteambalance\nif [[ \"$AUTOTEAMBALANCE\" = \"Enabled\" ]]; then\n AUTOTEAMBALANCE=1\nelif [[ \"$AUTOTEAMBALANCE\" = \"Disabled\" ]]; then\n AUTOTEAMBALANCE=0\nfi\n\n#Buyanywhere\nif [[ \"$BUYANYWHERE\" = \"Enabled\" ]]; then\n BUYANYWHERE=1\nelif [[ \"$BUYANYWHERE\" = \"Disabled\" ]]; then\n BUYANYWHERE=0\nelif [[ \"$BUYANYWHERE\" = \"Terrorists Only\" ]]; then\n BUYANYWHERE=2\nelif [[ \"$BUYANYWHERE\" = \"Counter-Terrorists Only\" ]]; then\n BUYANYWHERE=3\nfi\n\n#friendlyfire\n\nif [[ \"$FRIENDLYFIRE\" = \"Enabled\" ]]; then\n FRIENDLYFIRE=1\nelif [[ \"$FRIENDLYFIRE\" = \"Disabled\" ]]; then\n FRIENDLYFIRE=0\nfi\n\nset_hostname\napt_setup_update\n\n\n# CSGO specific dependencies\ndebconf-set-selections <<< \"postfix postfix/main_mailer_type string 'No Configuration'\"\ndebconf-set-selections <<< \"postfix postfix/mailname string `hostname`\"\ndpkg --add-architecture i386\napt update\nsudo apt -q -y install mailutils postfix \\\ncurl wget file bzip2 gzip unzip bsdmainutils \\\npython util-linux ca-certificates binutils bc \\\njq tmux lib32gcc1 libstdc++6 libstdc++6:i386\n\n# Install linuxGSM\nlinuxgsm_install\n\n# Install CSGO\ngame_install\n\n# Setup crons and create systemd service file\nservice_config\n\n#Game Config Options\n\n> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\n\ncat <> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\nsv_contact \"\"\nsv_lan 0\nlog on\nsv_logbans 1\nsv_logecho 1\nsv_logfile 1\nsv_log_onefile 0\nsv_hibernate_when_empty 1\nsv_hibernate_ms 5\nhost_name_store 1\nhost_info_show 1\nhost_players_show 2\nexec banned_user.cfg\nexec banned_ip.cfg\nwriteid\nwriteip\nEND\n\necho \"mp_autoteambalance $AUTOTEAMBALANCE\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\necho \"hostname $SERVERNAME\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\necho \"mp_roundtime $ROUNDTIME\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\necho \"rcon_password \\\"$RCONPASSWORD\\\"\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\necho \"sv_password \\\"$SVPASSWORD\\\"\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\nsed -i s/mp_buy_anywhere.*/mp_buy_anywhere\\ \"$BUYANYWHERE\"/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\nsed -i s/mp_maxrounds.*/mp_maxrounds\\ \"$MAXROUNDS\"/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\nsed -i s/mp_friendlyfire.*/mp_friendlyfire\\ \"$FRIENDLYFIRE\"/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\necho \"$MOTD\" > /home/csgoserver/serverfiles/csgo/motd.txt\n\n\nif [[ \"$FRIENDLYFIRE\" = \"1\" ]]; then\nsed -i s/ff_damage_reduction_bullets.*/ff_damage_reduction_bullets\\ 0\\.85/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\nsed -i s/ff_damage_reduction_gernade.*/ff_damage_reduction_gernade\\ 0\\.33/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\nsed -i s/ff_damage_reduction_gernade_self.*/ff_damage_reduction_gernade_self\\ 0\\.4/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\nsed -i s/ff_damage_reduction_other.*/ff_damage_reduction_other\\ 1/ /home/csgoserver/serverfiles/csgo/cfg/gamemode_casual.cfg\necho \"sv_kick_ban_duration 0\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\necho \"mp_disable_autokick 0\" >> /home/csgoserver/serverfiles/csgo/cfg/csgoserver.cfg\nfi\n\n# Start the service and setup firewall\nufw_install\nufw allow 27015\nufw allow 27020/udp\nufw allow 27005/udp\nufw enable\nfail2ban_install\nsystemctl start \"$GAMESERVER\".service\nsystemctl enable \"$GAMESERVER\".service\nstackscript_cleanup","user_defined_fields":[{"name":"gslt","label":"Game Server Login Token","example":"Steam gameserver token. Needed to list as public server."},{"name":"motd","label":"Message of the Day","default":"Powered by Linode!"},{"name":"servername","label":"Server Name","default":"Linode CS:GO Server"},{"name":"rconpassword","label":"RCON password"},{"name":"svpassword","label":"CSGO server password","default":""},{"name":"autoteambalance","label":"Team Balance Enabled","oneof":"Enabled,Disabled","default":"Enabled"},{"name":"roundtime","label":"Round Time Limit","oneof":"5,10,15,20,60","default":"5"},{"name":"maxrounds","label":"Maximum Rounds","oneof":"1,5,10,15,20","default":"10"},{"name":"buyanywhere","label":"Buy Anywhere ","oneof":"Disabled,Enabled,Counter-Terrorists Only, Terrorists Only","default":"Disabled"},{"name":"friendlyfire","label":"Friendly Fire Enabled","oneof":"Enabled,Disabled","default":"Disabled"}]},{"id":688891,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Discourse One-Click","description":"Discourse One-Click","ordinal":25,"logo_url":"assets/discourse.svg","images":["linode/ubuntu20.04"],"deployments_total":1226,"deployments_active":60,"is_public":true,"mine":false,"created":"2020-11-17T20:55:26","updated":"2024-01-07T15:42:18","rev_note":"","script":"#!/bin/bash\n\n## Discourse Settings\n\n#\n#\n#\n#\n#\n#\n#\n\n## Linode/SSH Security Settings\n#\n#\n#\n#\n\n# Source the Bash StackScript Library and the API functions for DNS\nsource \nsource \nsource \n\n# Source and run the New Linode Setup script for DNS/SSH configuration\n# This also sets some useful variables, like $IP and $FQDN\nsource \n\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\nset -xo pipefail\n\n#Install dependencies needed for Discourse\napt install git apt-transport-https ca-certificates curl software-properties-common net-tools -y\n\n#Clone Discourse Docker repo for install and management\ngit clone https://github.com/discourse/discourse_docker.git /var/discourse\n#UFW Firewall Rules\nufw allow http\nufw allow https\nufw allow 25\nufw allow 465\nufw allow 587\nufw enable <\n#\n#\n\nsource \nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n# Set hostname, configure apt and perform update/upgrade\nset_hostname\napt_setup_update\n\n# Install Python & Django\napt-get install -y python3 python3-pip\npip3 install Django\n\n# Create & Setup Django APP\nmkdir /var/www/\ncd /var/www/\ndjango-admin startproject DjangoApp\ncd DjangoApp\npython3 manage.py migrate\necho \"from django.contrib.auth.models import User; User.objects.create_superuser('$DJANGOUSER', '$DJANGOUSEREMAIL', '$DJANGOUSERPASSWORD')\" | python3 manage.py shell\nsed -i \"s/ALLOWED_HOSTS = \\[\\]/ALLOWED_HOSTS = \\['$IP'\\]/g\" DjangoApp/settings.py\npython3 manage.py runserver 0.0.0.0:8000 &\n\n# Start Django app on reboot\ncrontab -l | { cat; echo \"@reboot cd /var/www/DjangoApp && python3 manage.py runserver 0.0.0.0:8000 &\"; } | crontab -\n\n# Cleanup\nstackscript_cleanup","user_defined_fields":[{"name":"djangouser","label":"Django USER","example":"user1"},{"name":"djangouserpassword","label":"Django Password","example":"s3cure_p4ssw0rd"},{"name":"djangouseremail","label":"Django USER email","example":"user@email.tld"}]},{"id":607433,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Docker One-Click","description":"Docker One Click App","ordinal":27,"logo_url":"assets/docker.svg","images":["linode/ubuntu22.04"],"deployments_total":36549,"deployments_active":1783,"is_public":true,"mine":false,"created":"2019-10-31T20:14:04","updated":"2024-01-10T21:06:47","rev_note":"","script":"#!/bin/bash\nset -e\ntrap \"cleanup $? $LINENO\" EXIT\n\n## Docker Settings\n\n## Linode/SSH Security Settings\n#\n#\n#\n#\n\n## Domain Settings\n#\n#\n#\n#\n\n# git repo\nexport GIT_REPO=\"https://github.com/akamai-compute-marketplace/marketplace-apps.git\"\nexport WORK_DIR=\"/tmp/marketplace-apps\" \nexport MARKETPLACE_APP=\"apps/linode-marketplace-docker\"\n\n# enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\nfunction cleanup {\n if [ -d \"${WORK_DIR}\" ]; then\n rm -rf ${WORK_DIR}\n fi\n\n}\n\nfunction udf {\n local group_vars=\"${WORK_DIR}/${MARKETPLACE_APP}/group_vars/linode/vars\"\n if [[ -n ${SOA_EMAIL_ADDRESS} ]]; then\n echo \"soa_email_address: ${SOA_EMAIL_ADDRESS}\" >> ${group_vars};\n else echo \"No email entered\";\n fi\n\n if [[ -n ${USER_NAME} ]]; then\n echo \"username: ${USER_NAME}\" >> ${group_vars};\n else echo \"No username entered\";\n fi\n\n if [[ -n ${PASSWORD} ]]; then\n echo \"password: ${PASSWORD}\" >> ${group_vars};\n else echo \"No password entered\";\n fi\n\n if [[ -n ${PUBKEY} ]]; then\n echo \"pubkey: ${PUBKEY}\" >> ${group_vars};\n else echo \"No pubkey entered\";\n fi\n\n if [ \"$DISABLE_ROOT\" = \"Yes\" ]; then\n echo \"disable_root: yes\" >> ${group_vars};\n else echo \"Leaving root login enabled\";\n fi\n\n if [[ -n ${TOKEN_PASSWORD} ]]; then\n echo \"token_password: ${TOKEN_PASSWORD}\" >> ${group_vars};\n else echo \"No API token entered\";\n fi\n\n if [[ -n ${DOMAIN} ]]; then\n echo \"domain: ${DOMAIN}\" >> ${group_vars};\n #else echo \"No domain entered\";\n else echo \"default_dns: $(hostname -I | awk '{print $1}'| tr '.' '-' | awk {'print $1 \".ip.linodeusercontent.com\"'})\" >> ${group_vars};\n fi\n\n if [[ -n ${SUBDOMAIN} ]]; then\n echo \"subdomain: ${SUBDOMAIN}\" >> ${group_vars};\n else echo \"subdomain: www\" >> ${group_vars};\n fi\n}\n\nfunction run {\n # install dependancies\n apt-get update\n apt-get install -y git python3 python3-pip\n\n # clone repo and set up ansible environment\n git -C /tmp clone ${GIT_REPO}\n # for a single testing branch\n # git -C /tmp clone -b ${BRANCH} ${GIT_REPO}\n\n # venv\n cd ${WORK_DIR}/${MARKETPLACE_APP}\n pip3 install virtualenv\n python3 -m virtualenv env\n source env/bin/activate\n pip install pip --upgrade\n pip install -r requirements.txt\n ansible-galaxy install -r collections.yml\n\n # populate group_vars\n udf\n # run playbooks\n for playbook in provision.yml site.yml; do ansible-playbook -v $playbook; done\n}\n\nfunction installation_complete {\n echo \"Installation Complete\"\n}\n# main\nrun && installation_complete\ncleanup","user_defined_fields":[{"name":"user_name","label":"The limited sudo user to be created for the Linode","default":""},{"name":"password","label":"The password for the limited sudo user","example":"an0th3r_s3cure_p4ssw0rd","default":""},{"name":"disable_root","label":"Disable root access over SSH?","oneof":"Yes,No","default":"No"},{"name":"pubkey","label":"The SSH Public Key that will be used to access the Linode (Recommended)","default":""},{"name":"token_password","label":"Your Linode API token. This is needed to create your Linode's DNS records","default":""},{"name":"subdomain","label":"Subdomain","example":"The subdomain for the DNS record. `www` will be entered if no subdomain is supplied (Requires Domain)","default":""},{"name":"domain","label":"Domain","example":"The domain for the DNS record: example.com (Requires API token)","default":""},{"name":"soa_email_address","label":"SOA Email","example":"user@domain.tld","default":""}]},{"id":401698,"username":"linode","user_gravatar_id":"9d4d301385af69ceb7ad658aad09c142","label":"Drupal One-Click","description":"Drupal One-Click","ordinal":28,"logo_url":"assets/Drupal.svg","images":["linode/ubuntu22.04"],"deployments_total":1870,"deployments_active":80,"is_public":true,"mine":false,"created":"2019-03-08T21:04:47","updated":"2024-01-04T23:36:15","rev_note":"","script":"#!/usr/bin/env bash\n## Drupal Settings\n# \n# \n# \n\n## Linode/SSH Security Settings\n#\n#\n#\n#\n\n## Domain Settings\n#\n#\n#\n\n## Enable logging\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\nset -o pipefail\n\n## Import the Bash StackScript Library\nsource \n## Import the DNS/API Functions Library\nsource
Installing...Get back after 3 minutes!