diff --git a/.github/project-pr-labeler.yml b/.github/project-pr-labeler.yml index 3055e4667cc..c80da44a922 100644 --- a/.github/project-pr-labeler.yml +++ b/.github/project-pr-labeler.yml @@ -65,3 +65,12 @@ - plugins/woocommerce/src/Admin/**/* - plugins/woocommerce/src/Internal/Admin/**/* - plugins/woocommerce-admin/**/* + +'focus: performance tests [team:Solaris]': +- plugins/woocommerce/tests/performance/**/* + +'focus: api tests [team:Solaris]': +- plugins/woocommerce/tests/api-core-tests/**/* + +'focus: e2e tests [team:Solaris]': +- plugins/woocommerce/tests/e2e-pw/**/* diff --git a/.github/workflows/pr-unit-tests.yml b/.github/workflows/pr-unit-tests.yml index e328e50edcf..a5fcc87bcf0 100644 --- a/.github/workflows/pr-unit-tests.yml +++ b/.github/workflows/pr-unit-tests.yml @@ -15,12 +15,14 @@ permissions: {} jobs: test: if: ${{ github.event_name != 'pull_request' || github.event.pull_request.user.login != 'github-actions[bot]' }} - name: PHP ${{ matrix.php }} WP ${{ matrix.wp }} + name: PHP ${{ matrix.php }} WP ${{ matrix.wp }} ${{ matrix.hpos && 'HPOS' || '' }} timeout-minutes: 30 runs-on: ubuntu-20.04 permissions: contents: read continue-on-error: ${{ matrix.wp == 'nightly' }} + env: + HPOS: ${{ matrix.hpos }} strategy: fail-fast: false matrix: @@ -33,6 +35,9 @@ jobs: php: 7.4 - wp: '5.9' php: 7.4 + - wp: 'latest' + php: '7.4' + hpos: true services: database: image: mysql:5.6 diff --git a/changelog.txt b/changelog.txt index ab4640efbf2..30d4a66ac9e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,78 @@ == Changelog == += 7.5.1 2023-03-21 = + +**WooCommerce** + +* Fix - Fix no enforcing of min/max limits in quantity selector of variable products. [#36871](https://github.com/woocommerce/woocommerce/pull/36871) +* Dev - Update column definitions with synonymous types to prevent dbDelta from trying to ALTER them on each install. [#37277](https://github.com/woocommerce/woocommerce/pull/37277) +* Update - Update WooCommerce Blocks to 9.6.6. [#37298](https://github.com/woocommerce/woocommerce/pull/37298) + += 7.5.0 2023-03-14 = + +**WooCommerce** + +* Fix - Add HPOS support to the reserved stock query [#36535](https://github.com/woocommerce/woocommerce/pull/36535) +* Fix - Comment: Fix inconsistencies on Analytics > Orders table when using date_paid or date_completed [#36876](https://github.com/woocommerce/woocommerce/pull/36876) +* Fix - Define a public `api` property in the WooCommerce class to prevent a PHP deprecation warning [#36545](https://github.com/woocommerce/woocommerce/pull/36545) +* Fix - Don't delete order from posts table when deleted from orders table if the later is authoritative and sync is off [#36617](https://github.com/woocommerce/woocommerce/pull/36617) +* Fix - Eliminate data store internal meta keys duplicates [#36611](https://github.com/woocommerce/woocommerce/pull/36611) +* Fix - Ensure changes made via the `woocommerce_order_list_table_prepare_items_query_args` are observed. [#36649](https://github.com/woocommerce/woocommerce/pull/36649) +* Fix - Ensuring that we know if allowTracking is true before adding exit page. [#36656](https://github.com/woocommerce/woocommerce/pull/36656) +* Fix - Fix Ampersand changed to & on product attribute export [#36525](https://github.com/woocommerce/woocommerce/pull/36525) +* Fix - Fix decimal points for NOK currency [#36780](https://github.com/woocommerce/woocommerce/pull/36780) +* Fix - Fix inconsitent product task icon colors [#36889](https://github.com/woocommerce/woocommerce/pull/36889) +* Fix - Fix WordPress unit tests libraries being installed in a symlinked folder structure [#36641](https://github.com/woocommerce/woocommerce/pull/36641) +* Fix - Make states optional for Hungary and Bulgaria. [#36701](https://github.com/woocommerce/woocommerce/pull/36701) +* Fix - Screen ID matching switched to untranslated 'woocommerce' strings. [#36854](https://github.com/woocommerce/woocommerce/pull/36854) +* Fix - Translate the labels for units of measure. [#36708](https://github.com/woocommerce/woocommerce/pull/36708) +* Fix - Update `config@3.3.7` (from `3.3.3`). Fix `node_env_var_name is not defined` error. [#33828](https://github.com/woocommerce/woocommerce/pull/33828) +* Add - Add 'add_tab' method in FormFactory to allow plugins to extend the WooCommerce admin product form [#36583](https://github.com/woocommerce/woocommerce/pull/36583) +* Add - Add @woocommerce/product-editor dependency and change dependency of ProductSectionLayout component. [#36600](https://github.com/woocommerce/woocommerce/pull/36600) +* Add - Add additional global attributes and local attributes information when saving product attributes [#36858](https://github.com/woocommerce/woocommerce/pull/36858) +* Add - Add a new Channels card in multichannel marketing page. [#36541](https://github.com/woocommerce/woocommerce/pull/36541) +* Add - Add an experimental slot for marketing overview extensibility [#36828](https://github.com/woocommerce/woocommerce/pull/36828) +* Add - Add slot fill support for tabs for the new product management MVP. [#36551](https://github.com/woocommerce/woocommerce/pull/36551) +* Add - Add survey after disabling new experience [#36544](https://github.com/woocommerce/woocommerce/pull/36544) +* Add - Add unique sku option to error data when setting product sku [#36612](https://github.com/woocommerce/woocommerce/pull/36612) +* Add - Add WC-specific criteria to the Site Health test for persistent object caches [#35202](https://github.com/woocommerce/woocommerce/pull/35202) +* Add - Enable new experience when new user selects "Physical product". [#36406](https://github.com/woocommerce/woocommerce/pull/36406) +* Update - Update WooCommerce Blocks to 9.6.5 [#37051](https://github.com/woocommerce/woocommerce/pull/37051) +* Update - Update WooCommerce Blocks to 9.6.3 [#36992](https://github.com/woocommerce/woocommerce/pull/36992) +* Update - Update WooCommerce Blocks to 9.6.2 [#36919](https://github.com/woocommerce/woocommerce/pull/36919) +* Update - Add date_paid and date_completed date sorting options for Revenue and Order reports [#36492](https://github.com/woocommerce/woocommerce/pull/36492) +* Update - Add default value for backorders [#36607](https://github.com/woocommerce/woocommerce/pull/36607) +* Update - Add Skydropx, Envia, Sendcloud, Packlink to shipping task [#36873](https://github.com/woocommerce/woocommerce/pull/36873) +* Update - Always show comments for product feedback form [#36484](https://github.com/woocommerce/woocommerce/pull/36484) +* Update - Delete FlexSlider code for legacy browsers. [#36690](https://github.com/woocommerce/woocommerce/pull/36690) +* Update - Disable the new product editor, pending design updates. [#36894](https://github.com/woocommerce/woocommerce/pull/36894) +* Update - Have "Grow your store" appear first in marketing task by default [#36826](https://github.com/woocommerce/woocommerce/pull/36826) +* Update - Migrating product editor pricing section to slot fills. [#36500](https://github.com/woocommerce/woocommerce/pull/36500) +* Update - Refactor slot fills to ensure variant fills have distinct slots. [#36646](https://github.com/woocommerce/woocommerce/pull/36646) +* Update - Removed I.D column from product import samples [#36857](https://github.com/woocommerce/woocommerce/pull/36857) +* Update - Remove Meta from grow your store list [#36886](https://github.com/woocommerce/woocommerce/pull/36886) +* Update - Remove opinionated styles from buttons in block themes so they inherit theme styles more accurately [#36651](https://github.com/woocommerce/woocommerce/pull/36651) +* Update - Replace $.ajax() calls with browser-native window.fetch() calls. [#36275](https://github.com/woocommerce/woocommerce/pull/36275) +* Update - Update payment gateway list ordering priority and remove Klarna from North America [#36550](https://github.com/woocommerce/woocommerce/pull/36550) +* Update - Update Playwright version from 1.28.0 -> 1.30.0 [#36789](https://github.com/woocommerce/woocommerce/pull/36789) +* Update - Updates to product editor fill to support new prop API. [#36592](https://github.com/woocommerce/woocommerce/pull/36592) +* Update - Update WooCommerce Blocks 9.6.0 & 9.6.1 [#36852](https://github.com/woocommerce/woocommerce/pull/36852) +* Dev - Add attribute creation form when there are no attributes [#36606](https://github.com/woocommerce/woocommerce/pull/36606) +* Dev - Add a unit test for woocommerce_admin_experimental_onboarding_tasklists filter [#36827](https://github.com/woocommerce/woocommerce/pull/36827) +* Dev - Code refactor on marketing components. [#36540](https://github.com/woocommerce/woocommerce/pull/36540) +* Dev - Made e2e selectors more robust [#36499](https://github.com/woocommerce/woocommerce/pull/36499) +* Dev - Remove attribute type logic from attribute component [#36563](https://github.com/woocommerce/woocommerce/pull/36563) +* Dev - Update eslint to 8.32.0 across the monorepo. [#36700](https://github.com/woocommerce/woocommerce/pull/36700) +* Dev - Update pnpm command to run e2e tests for consistency. Also update docs with new command. [#35287](https://github.com/woocommerce/woocommerce/pull/35287) +* Tweak - Add IR and fields priorities to list of get_country_locale() method to follow conventional way of addressing in Iran. [#36491](https://github.com/woocommerce/woocommerce/pull/36491) +* Tweak - Add missing deprecation notice for filter hook woocommerce_my_account_my_orders_columns. [#36356](https://github.com/woocommerce/woocommerce/pull/36356) +* Tweak - Adjust default sizes for the quantity and coupon input fields within the cart page. [#29122](https://github.com/woocommerce/woocommerce/pull/29122) +* Tweak - Do not display low/out-of-stock information in the dashboard status widget when stock management is disabled. [#36703](https://github.com/woocommerce/woocommerce/pull/36703) +* Tweak - Remove free trial terms from Avalara tax task [#36888](https://github.com/woocommerce/woocommerce/pull/36888) +* Tweak - Tweak product link description and display in the new product management experience [#36591](https://github.com/woocommerce/woocommerce/pull/36591) +* Enhancement - Change the sass variable names to more predictable ones. [#28908](https://github.com/woocommerce/woocommerce/pull/28908) + + = 7.4.1 2023-03-01 = **WooCommerce** diff --git a/package.json b/package.json index 84bb3b8b7ec..9e50a58b174 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "sass": "^1.49.9", "sass-loader": "^10.2.1", "syncpack": "^9.8.4", - "turbo": "^1.7.0", + "turbo": "^1.8.3", "typescript": "^4.8.3", "url-loader": "^1.1.2", "webpack": "^5.70.0" diff --git a/packages/js/admin-e2e-tests/changelog/remove-wcpay-accordion b/packages/js/admin-e2e-tests/changelog/remove-wcpay-accordion new file mode 100644 index 00000000000..a84afb86acd --- /dev/null +++ b/packages/js/admin-e2e-tests/changelog/remove-wcpay-accordion @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Update showOtherPaymentMethods() to test latest payment task properly diff --git a/packages/js/admin-e2e-tests/src/pages/PaymentsSetup.ts b/packages/js/admin-e2e-tests/src/pages/PaymentsSetup.ts index 5454a276cc4..2404ff42000 100644 --- a/packages/js/admin-e2e-tests/src/pages/PaymentsSetup.ts +++ b/packages/js/admin-e2e-tests/src/pages/PaymentsSetup.ts @@ -31,12 +31,6 @@ export class PaymentsSetup extends BasePage { } async showOtherPaymentMethods(): Promise< void > { - const selector = '.woocommerce-task-payments button.toggle-button'; - await this.page.waitForSelector( selector ); - const toggleButton = await this.page.$( - `${ selector }[aria-expanded=false]` - ); - await toggleButton?.click(); await waitForElementByText( 'h2', 'Offline payment methods' ); } diff --git a/packages/js/components/changelog/add-toggle-content-block-37253 b/packages/js/components/changelog/add-toggle-content-block-37253 new file mode 100644 index 00000000000..38395751212 --- /dev/null +++ b/packages/js/components/changelog/add-toggle-content-block-37253 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Adding simple DisplayState wrapper and modifying Collapsible component to allow rendering hidden content. diff --git a/packages/js/components/src/collapsible-content/collapsible-content.tsx b/packages/js/components/src/collapsible-content/collapsible-content.tsx index 0bacc92dbe5..e839de2b450 100644 --- a/packages/js/components/src/collapsible-content/collapsible-content.tsx +++ b/packages/js/components/src/collapsible-content/collapsible-content.tsx @@ -7,10 +7,12 @@ import { Icon, chevronDown, chevronUp } from '@wordpress/icons'; /** * Internal dependencies */ +import { DisplayState } from '../display-state'; export type CollapsedProps = { initialCollapsed?: boolean; toggleText: string; + persistRender?: boolean; children: React.ReactNode; } & React.HTMLAttributes< HTMLDivElement >; @@ -18,9 +20,19 @@ export const CollapsibleContent: React.FC< CollapsedProps > = ( { initialCollapsed = true, toggleText, children, + persistRender = false, ...props }: CollapsedProps ) => { const [ collapsed, setCollapsed ] = useState( initialCollapsed ); + + const getState = () => { + if ( ! collapsed ) { + return 'visible'; + } + + return persistRender ? 'visually-hidden' : 'hidden'; + }; + return (
= ( { />
- { ! collapsed && ( +
{ children }
- ) } +
); }; diff --git a/packages/js/components/src/display-state/display-state.tsx b/packages/js/components/src/display-state/display-state.tsx new file mode 100644 index 00000000000..a6f88084c3e --- /dev/null +++ b/packages/js/components/src/display-state/display-state.tsx @@ -0,0 +1,28 @@ +/** + * External dependencies + */ +import { createElement, Fragment } from '@wordpress/element'; + +/** + * Internal dependencies + */ + +export type DisplayStateProps = { + state?: 'visible' | 'visually-hidden' | 'hidden'; + children: React.ReactNode; +} & React.HTMLAttributes< HTMLDivElement >; + +export const DisplayState: React.FC< DisplayStateProps > = ( { + state = 'visible', + children, +} ) => { + if ( state === 'visible' ) { + return <>{ children }; + } + + if ( state === 'visually-hidden' ) { + return
{ children }
; + } + + return null; +}; diff --git a/packages/js/components/src/display-state/index.ts b/packages/js/components/src/display-state/index.ts new file mode 100644 index 00000000000..16d59fea698 --- /dev/null +++ b/packages/js/components/src/display-state/index.ts @@ -0,0 +1 @@ +export * from './display-state'; diff --git a/packages/js/components/src/index.ts b/packages/js/components/src/index.ts index c0dc21b62b1..95a5c069817 100644 --- a/packages/js/components/src/index.ts +++ b/packages/js/components/src/index.ts @@ -103,3 +103,4 @@ export { ProductSectionLayout as __experimentalProductSectionLayout, ProductFieldSection as __experimentalProductFieldSection, } from './product-section-layout'; +export { DisplayState } from './display-state'; diff --git a/packages/js/customer-effort-score/changelog/update-move-ces-data-store b/packages/js/customer-effort-score/changelog/update-move-ces-data-store new file mode 100644 index 00000000000..b85fbb8d362 --- /dev/null +++ b/packages/js/customer-effort-score/changelog/update-move-ces-data-store @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Add CES data store to @woocommerce/customer-effort-score diff --git a/packages/js/customer-effort-score/changelog/update-move-remaining-ces-to-package b/packages/js/customer-effort-score/changelog/update-move-remaining-ces-to-package new file mode 100644 index 00000000000..9795fb06a03 --- /dev/null +++ b/packages/js/customer-effort-score/changelog/update-move-remaining-ces-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Move additional components to @woocommerce/customer-effort-score. diff --git a/packages/js/customer-effort-score/package.json b/packages/js/customer-effort-score/package.json index c40f56aed5a..3dae30da83b 100644 --- a/packages/js/customer-effort-score/package.json +++ b/packages/js/customer-effort-score/package.json @@ -51,6 +51,7 @@ "@woocommerce/eslint-plugin": "workspace:*", "@woocommerce/internal-style-build": "workspace:*", "@woocommerce/navigation": "workspace:*", + "@woocommerce/tracks": "workspace:*", "@wordpress/browserslist-config": "wp-6.0", "concurrently": "^7.0.0", "css-loader": "^3.6.0", diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-modal-container.tsx b/packages/js/customer-effort-score/src/components/customer-effort-score-modal-container/index.tsx similarity index 90% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-modal-container.tsx rename to packages/js/customer-effort-score/src/components/customer-effort-score-modal-container/index.tsx index 2e94428c85e..042b868b481 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-modal-container.tsx +++ b/packages/js/customer-effort-score/src/components/customer-effort-score-modal-container/index.tsx @@ -3,16 +3,17 @@ */ import { __ } from '@wordpress/i18n'; import { useDispatch, useSelect } from '@wordpress/data'; -import { CustomerFeedbackModal } from '@woocommerce/customer-effort-score'; -import { recordEvent } from '@woocommerce/tracks'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; +import { createElement } from '@wordpress/element'; +import { recordEvent } from '@woocommerce/tracks'; /** * Internal dependencies */ -import { getStoreAgeInWeeks } from './utils'; -import { ADMIN_INSTALL_TIMESTAMP_OPTION_NAME } from './constants'; -import { STORE_KEY } from './data/constants'; +import { CustomerFeedbackModal } from '../'; +import { getStoreAgeInWeeks } from '../../utils'; +import { STORE_KEY } from '../../store'; +import { ADMIN_INSTALL_TIMESTAMP_OPTION_NAME } from '../../constants'; export const PRODUCT_MVP_CES_ACTION_OPTION_NAME = 'woocommerce_ces_product_mvp_ces_action'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks-container.js b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks-container/index.js similarity index 87% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks-container.js rename to packages/js/customer-effort-score/src/components/customer-effort-score-tracks-container/index.js index 017748e52fa..46c8ce38afd 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks-container.js +++ b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks-container/index.js @@ -4,15 +4,15 @@ import { useEffect } from 'react'; import { compose } from '@wordpress/compose'; import { withDispatch, withSelect } from '@wordpress/data'; +import { createElement, Fragment } from '@wordpress/element'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; import PropTypes from 'prop-types'; /** * Internal dependencies */ -import CustomerEffortScoreTracks from './customer-effort-score-tracks'; -import { STORE_KEY, QUEUE_OPTION_NAME } from './data/constants'; -import './data'; +import { CustomerEffortScoreTracks } from '../'; +import { QUEUE_OPTION_NAME, STORE_KEY } from '../../store'; /** * Maps the queue of CES tracks surveys to CustomerEffortScoreTracks @@ -25,7 +25,7 @@ import './data'; * @param {boolean} props.resolving Whether the queue is resolving. * @param {Function} props.clearQueue Sets up clearing of the queue on the next page load. */ -function CustomerEffortScoreTracksContainer( { +function _CustomerEffortScoreTracksContainer( { queue, resolving, clearQueue, @@ -65,7 +65,7 @@ function CustomerEffortScoreTracksContainer( { ); } -CustomerEffortScoreTracksContainer.propTypes = { +_CustomerEffortScoreTracksContainer.propTypes = { /** * The queue of CES tracks surveys to display. */ @@ -80,7 +80,7 @@ CustomerEffortScoreTracksContainer.propTypes = { clearQueue: PropTypes.func, }; -export default compose( +export const CustomerEffortScoreTracksContainer = compose( withSelect( ( select ) => { const { getCesSurveyQueue, isResolving } = select( STORE_KEY ); const queue = getCesSurveyQueue(); @@ -107,4 +107,4 @@ export default compose( }, }; } ) -)( CustomerEffortScoreTracksContainer ); +)( _CustomerEffortScoreTracksContainer ); diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks.js b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks/index.js similarity index 95% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks.js rename to packages/js/customer-effort-score/src/components/customer-effort-score-tracks/index.js index 295f32c3a53..b1506ffb5e1 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/customer-effort-score-tracks.js +++ b/packages/js/customer-effort-score/src/components/customer-effort-score-tracks/index.js @@ -1,26 +1,24 @@ /** * External dependencies */ -import { useState } from '@wordpress/element'; import PropTypes from 'prop-types'; -import { recordEvent } from '@woocommerce/tracks'; -import { - ALLOW_TRACKING_OPTION_NAME, - CustomerEffortScore, -} from '@woocommerce/customer-effort-score'; import { compose } from '@wordpress/compose'; import { withSelect, withDispatch } from '@wordpress/data'; +import { createElement, useState } from '@wordpress/element'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; import { __ } from '@wordpress/i18n'; +import { recordEvent } from '@woocommerce/tracks'; /** * Internal dependencies */ +import { CustomerEffortScore } from '../'; import { - SHOWN_FOR_ACTIONS_OPTION_NAME, ADMIN_INSTALL_TIMESTAMP_OPTION_NAME, -} from './constants'; -import { getStoreAgeInWeeks } from './utils'; + ALLOW_TRACKING_OPTION_NAME, + SHOWN_FOR_ACTIONS_OPTION_NAME, +} from '../../constants'; +import { getStoreAgeInWeeks } from '../../utils'; /** * A CustomerEffortScore wrapper that uses tracks to track the selected @@ -43,7 +41,7 @@ import { getStoreAgeInWeeks } from './utils'; * @param {Function} props.updateOptions Function to update options. * @param {Function} props.createNotice Function to create a snackbar. */ -function CustomerEffortScoreTracks( { +function _CustomerEffortScoreTracks( { action, trackProps, title, @@ -176,7 +174,7 @@ function CustomerEffortScoreTracks( { ); } -CustomerEffortScoreTracks.propTypes = { +_CustomerEffortScoreTracks.propTypes = { /** * The action name sent to Tracks. */ @@ -219,7 +217,7 @@ CustomerEffortScoreTracks.propTypes = { createNotice: PropTypes.func, }; -export default compose( +export const CustomerEffortScoreTracks = compose( withSelect( ( select ) => { const { getOption, hasFinishedResolution } = select( OPTIONS_STORE_NAME ); @@ -262,4 +260,4 @@ export default compose( createNotice, }; } ) -)( CustomerEffortScoreTracks ); +)( _CustomerEffortScoreTracks ); diff --git a/packages/js/customer-effort-score/src/components/index.ts b/packages/js/customer-effort-score/src/components/index.ts new file mode 100644 index 00000000000..81ae0d67dfe --- /dev/null +++ b/packages/js/customer-effort-score/src/components/index.ts @@ -0,0 +1,8 @@ +export * from './customer-effort-score'; +export * from './customer-effort-score-modal-container'; +export * from './customer-effort-score-tracks'; +export * from './customer-effort-score-tracks-container'; +export * from './customer-feedback-simple'; +export * from './customer-feedback-modal'; +export * from './product-mvp-feedback-modal'; +export * from './feedback-modal'; diff --git a/packages/js/customer-effort-score/src/constants.js b/packages/js/customer-effort-score/src/constants.js index 498d982940a..d2914cd46ca 100644 --- a/packages/js/customer-effort-score/src/constants.js +++ b/packages/js/customer-effort-score/src/constants.js @@ -1 +1,7 @@ +export const ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = + 'woocommerce_admin_install_timestamp'; + export const ALLOW_TRACKING_OPTION_NAME = 'woocommerce_allow_tracking'; + +export const SHOWN_FOR_ACTIONS_OPTION_NAME = + 'woocommerce_ces_shown_for_actions'; diff --git a/packages/js/customer-effort-score/src/hooks/index.ts b/packages/js/customer-effort-score/src/hooks/index.ts new file mode 100644 index 00000000000..e65c8eb7746 --- /dev/null +++ b/packages/js/customer-effort-score/src/hooks/index.ts @@ -0,0 +1 @@ +export * from './use-customer-effort-score-exit-page-tracker'; diff --git a/packages/js/customer-effort-score/src/index.ts b/packages/js/customer-effort-score/src/index.ts index 55144d5b467..de54752495a 100644 --- a/packages/js/customer-effort-score/src/index.ts +++ b/packages/js/customer-effort-score/src/index.ts @@ -1,8 +1,5 @@ -export * from './components/customer-effort-score'; -export * from './components/customer-feedback-simple'; -export * from './components/customer-feedback-modal'; -export * from './components/product-mvp-feedback-modal'; -export * from './components/feedback-modal'; -export * from './hooks/use-customer-effort-score-exit-page-tracker'; -export * from './utils/customer-effort-score-exit-page'; +export * from './components'; export * from './constants'; +export * from './hooks'; +export * from './store'; +export * from './utils'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/action-types.js b/packages/js/customer-effort-score/src/store/action-types.js similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/action-types.js rename to packages/js/customer-effort-score/src/store/action-types.js diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/actions.js b/packages/js/customer-effort-score/src/store/actions.js similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/actions.js rename to packages/js/customer-effort-score/src/store/actions.js diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/constants.js b/packages/js/customer-effort-score/src/store/constants.js similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/constants.js rename to packages/js/customer-effort-score/src/store/constants.js diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/index.js b/packages/js/customer-effort-score/src/store/index.js similarity index 80% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/index.js rename to packages/js/customer-effort-score/src/store/index.js index e476479ea88..e05a8637ebc 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/index.js +++ b/packages/js/customer-effort-score/src/store/index.js @@ -11,7 +11,9 @@ import * as actions from './actions'; import * as resolvers from './resolvers'; import * as selectors from './selectors'; import reducer from './reducer'; -import { STORE_KEY } from './constants'; +import { QUEUE_OPTION_NAME, STORE_KEY } from './constants'; + +export { QUEUE_OPTION_NAME, STORE_KEY }; export default registerStore( STORE_KEY, { actions, diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/reducer.js b/packages/js/customer-effort-score/src/store/reducer.js similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/reducer.js rename to packages/js/customer-effort-score/src/store/reducer.js diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/resolvers.js b/packages/js/customer-effort-score/src/store/resolvers.js similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/resolvers.js rename to packages/js/customer-effort-score/src/store/resolvers.js diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/data/selectors.js b/packages/js/customer-effort-score/src/store/selectors.js similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/data/selectors.js rename to packages/js/customer-effort-score/src/store/selectors.js diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/utils.ts b/packages/js/customer-effort-score/src/utils/get-store-age-in-weeks.ts similarity index 100% rename from plugins/woocommerce-admin/client/customer-effort-score-tracks/utils.ts rename to packages/js/customer-effort-score/src/utils/get-store-age-in-weeks.ts diff --git a/packages/js/customer-effort-score/src/utils/index.ts b/packages/js/customer-effort-score/src/utils/index.ts new file mode 100644 index 00000000000..db394918df5 --- /dev/null +++ b/packages/js/customer-effort-score/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './customer-effort-score-exit-page'; +export * from './get-store-age-in-weeks'; diff --git a/packages/js/data/changelog/add-37004 b/packages/js/data/changelog/add-37004 new file mode 100644 index 00000000000..78dee2bbd8a --- /dev/null +++ b/packages/js/data/changelog/add-37004 @@ -0,0 +1,4 @@ +Significance: minor +Type: fix + +Fix linter errors diff --git a/packages/js/data/changelog/add-track-event-for-plugins-actions b/packages/js/data/changelog/add-track-event-for-plugins-actions new file mode 100644 index 00000000000..d766dff9913 --- /dev/null +++ b/packages/js/data/changelog/add-track-event-for-plugins-actions @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Add tracks for plugin actions and handle plugin error properly diff --git a/packages/js/data/package.json b/packages/js/data/package.json index 2e9a37e793f..b237e40a7f2 100644 --- a/packages/js/data/package.json +++ b/packages/js/data/package.json @@ -28,6 +28,7 @@ "dependencies": { "@woocommerce/date": "workspace:*", "@woocommerce/navigation": "workspace:*", + "@woocommerce/tracks": "workspace:*", "@wordpress/api-fetch": "wp-6.0", "@wordpress/compose": "wp-6.0", "@wordpress/core-data": "wp-6.0", diff --git a/packages/js/data/src/plugins/actions.ts b/packages/js/data/src/plugins/actions.ts index 8a15fc82441..be5df5aea54 100644 --- a/packages/js/data/src/plugins/actions.ts +++ b/packages/js/data/src/plugins/actions.ts @@ -9,6 +9,7 @@ import { import { _n, sprintf } from '@wordpress/i18n'; import { DispatchFromMap } from '@automattic/data-stores'; import { controls } from '@wordpress/data'; +import { recordEvent } from '@woocommerce/tracks'; /** * Internal dependencies @@ -49,21 +50,22 @@ const isPluginResponseError = ( typeof error === 'object' && error !== null && plugins[ 0 ] in error; const formatErrorMessage = ( - pluginErrors: PluginResponseErrors, - actionType = 'install' + actionType: 'install' | 'activate' = 'install', + plugins: Partial< PluginNames >[], + rawErrorMessage: string ) => { return sprintf( /* translators: %(actionType): install or activate (the plugin). %(pluginName): a plugin slug (e.g. woocommerce-services). %(error): a single error message or in plural a comma separated error message list.*/ _n( 'Could not %(actionType)s %(pluginName)s plugin, %(error)s', 'Could not %(actionType)s the following plugins: %(pluginName)s with these Errors: %(error)s', - Object.keys( pluginErrors ).length || 1, + Object.keys( plugins ).length || 1, 'woocommerce' ), { actionType, - pluginName: Object.keys( pluginErrors ).join( ', ' ), - error: Object.values( pluginErrors ).join( ', \n' ), + pluginName: plugins.join( ', ' ), + error: rawErrorMessage, } ); }; @@ -174,35 +176,42 @@ export function setRecommendedPlugins( } function* handlePluginAPIError( - actionType: string, + actionType: 'install' | 'activate', plugins: Partial< PluginNames >[], error: unknown ) { - yield setError( 'installPlugins', error ); + let rawErrorMessage; - let pluginResponseError = error; - if ( - ( error instanceof Error || isRestApiError( error ) ) && - plugins[ 0 ] - ) { - pluginResponseError = { - [ plugins[ 0 ] ]: [ error.message ], - }; - } - - if ( isPluginResponseError( plugins, pluginResponseError ) ) { - throw new PluginError( - formatErrorMessage( pluginResponseError, actionType ), - pluginResponseError - ); + if ( isPluginResponseError( plugins, error ) ) { + // Backend error messages are in the form of { plugin-slug: [ error messages ] }. + rawErrorMessage = Object.values( error ).join( ', \n' ); } else { - throw new PluginError( - `Unexpected Plugin Error: ${ JSON.stringify( - pluginResponseError - ) }`, - pluginResponseError - ); + // Other error such as API connection errors. + rawErrorMessage = + isRestApiError( error ) || error instanceof Error + ? error.message + : JSON.stringify( error ); } + + // Track the error. + switch ( actionType ) { + case 'install': + recordEvent( 'install_plugins_error', { + plugins: plugins.join( ', ' ), + message: rawErrorMessage, + } ); + break; + case 'activate': + recordEvent( 'activate_plugins_error', { + plugins: plugins.join( ', ' ), + message: rawErrorMessage, + } ); + } + + throw new PluginError( + formatErrorMessage( actionType, plugins, rawErrorMessage ), + error + ); } // Action Creator Generators @@ -225,6 +234,7 @@ export function* installPlugins( plugins: Partial< PluginNames >[] ) { return results; } catch ( error ) { + yield setError( 'installPlugins', error ); yield handlePluginAPIError( 'install', plugins, error ); } finally { yield setIsRequesting( 'installPlugins', false ); @@ -251,6 +261,7 @@ export function* activatePlugins( plugins: Partial< PluginNames >[] ) { return results; } catch ( error ) { + yield setError( 'activatePlugins', error ); yield handlePluginAPIError( 'activate', plugins, error ); } finally { yield setIsRequesting( 'activatePlugins', false ); @@ -305,7 +316,7 @@ export function* connectToJetpack( } export function* installJetpackAndConnect( - errorAction: ( errorMesage: string ) => void, + errorAction: ( errorMessage: string ) => void, getAdminLink: ( endpoint: string ) => string ) { try { @@ -329,7 +340,7 @@ export function* installJetpackAndConnect( export function* connectToJetpackWithFailureRedirect( failureRedirect: string, - errorAction: ( errorMesage: string ) => void, + errorAction: ( errorMessage: string ) => void, getAdminLink: ( endpoint: string ) => string ) { try { diff --git a/packages/js/navigation/changelog/update-36723 b/packages/js/navigation/changelog/update-36723 new file mode 100644 index 00000000000..0e9b71d29f6 --- /dev/null +++ b/packages/js/navigation/changelog/update-36723 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add hook to check unsaved form changes before page navigation diff --git a/packages/js/navigation/package.json b/packages/js/navigation/package.json index 6e44b7823ee..909bca7e2ab 100644 --- a/packages/js/navigation/package.json +++ b/packages/js/navigation/package.json @@ -31,6 +31,7 @@ "@wordpress/compose": "wp-6.0", "@wordpress/element": "wp-6.0", "@wordpress/hooks": "wp-6.0", + "@wordpress/i18n": "wp-6.0", "@wordpress/notices": "wp-6.0", "@wordpress/url": "wp-6.0", "history": "^5.3.0", diff --git a/plugins/woocommerce-admin/client/hooks/usePreventLeavingPage.ts b/packages/js/navigation/src/hooks/use-confirm-unsaved-changes.ts similarity index 74% rename from plugins/woocommerce-admin/client/hooks/usePreventLeavingPage.ts rename to packages/js/navigation/src/hooks/use-confirm-unsaved-changes.ts index fe8cad7f193..3cd3137ed66 100644 --- a/plugins/woocommerce-admin/client/hooks/usePreventLeavingPage.ts +++ b/packages/js/navigation/src/hooks/use-confirm-unsaved-changes.ts @@ -1,16 +1,17 @@ /** * External dependencies */ -import { useContext, useEffect, useMemo } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; -import { parseAdminUrl } from '@woocommerce/navigation'; -import { - Location, - UNSAFE_NavigationContext as NavigationContext, - useLocation, -} from 'react-router-dom'; +import { Location } from 'react-router-dom'; +import { useEffect, useMemo } from '@wordpress/element'; -export default function usePreventLeavingPage( +/** + * Internal dependencies + */ +import { getHistory } from '../history'; +import { parseAdminUrl } from '../'; + +export const useConfirmUnsavedChanges = ( hasUnsavedChanges: boolean, shouldConfirm?: ( path: URL, fromUrl: Location ) => boolean, /** @@ -19,24 +20,24 @@ export default function usePreventLeavingPage( * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#compatibility_notes */ message?: string -) { +) => { const confirmMessage = useMemo( () => message ?? __( 'Changes you made may not be saved.', 'woocommerce' ), [ message ] ); - const { navigator } = useContext( NavigationContext ); - const fromUrl = useLocation(); + const history = getHistory(); // This effect prevent react router from navigate and show // a confirmation message. It's a work around to beforeunload // because react router does not triggers that event. useEffect( () => { if ( hasUnsavedChanges ) { - const push = navigator.push; + const push = history.push; - navigator.push = ( ...args: Parameters< typeof push > ) => { + history.push = ( ...args: Parameters< typeof push > ) => { + const fromUrl = history.location; const toUrl = parseAdminUrl( args[ 0 ] ) as URL; if ( typeof shouldConfirm === 'function' && @@ -54,10 +55,10 @@ export default function usePreventLeavingPage( }; return () => { - navigator.push = push; + history.push = push; }; } - }, [ navigator, hasUnsavedChanges, confirmMessage ] ); + }, [ history, hasUnsavedChanges, confirmMessage ] ); // This effect listen to the native beforeunload event to show // a confirmation message @@ -79,4 +80,4 @@ export default function usePreventLeavingPage( }; } }, [ hasUnsavedChanges, confirmMessage ] ); -} +}; diff --git a/packages/js/navigation/src/index.js b/packages/js/navigation/src/index.js index 767f0b0533f..eeb2818a027 100644 --- a/packages/js/navigation/src/index.js +++ b/packages/js/navigation/src/index.js @@ -18,9 +18,6 @@ import { getAdminLink } from '@woocommerce/settings'; * Internal dependencies */ import { getHistory } from './history'; -import * as navUtils from './index'; - -// For the above, import the module into itself. Functions consumed from this import can be mocked in tests. // Expose history so all uses get the same history object. export { getHistory }; @@ -28,6 +25,9 @@ export { getHistory }; // Export all filter utilities export * from './filters'; +// Export all hooks +export { useConfirmUnsavedChanges } from './hooks/use-confirm-unsaved-changes'; + const TIME_EXCLUDED_SCREENS_FILTER = 'woocommerce_admin_time_excluded_screens'; /** @@ -79,7 +79,7 @@ export function getNewPath( * @param {Object} query Query containing the parameters. * @return {Object} Object containing the persisted queries. */ -export const getPersistedQuery = ( query = navUtils.getQuery() ) => { +export const getPersistedQuery = ( query = getQuery() ) => { /** * Filter persisted queries. These query parameters remain in the url when other parameters are updated. * @@ -226,7 +226,7 @@ export function getIdsFromQuery( queryString = '' ) { * @param {Object} query Query object. * @return {Array} List of search words. */ -export function getSearchWords( query = navUtils.getQuery() ) { +export function getSearchWords( query = getQuery() ) { if ( typeof query !== 'object' ) { throw new Error( 'Invalid parameter passed to getSearchWords, it expects an object or no parameters.' diff --git a/packages/js/product-editor/babel.config.js b/packages/js/product-editor/babel.config.js new file mode 100644 index 00000000000..f73e04467aa --- /dev/null +++ b/packages/js/product-editor/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: '../internal-js-tests/babel.config.js', +}; diff --git a/packages/js/product-editor/changelog/add-37004 b/packages/js/product-editor/changelog/add-37004 new file mode 100644 index 00000000000..f2086db98d3 --- /dev/null +++ b/packages/js/product-editor/changelog/add-37004 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add custom validation hook diff --git a/packages/js/product-editor/changelog/add-37005 b/packages/js/product-editor/changelog/add-37005 new file mode 100644 index 00000000000..2b45e42e13d --- /dev/null +++ b/packages/js/product-editor/changelog/add-37005 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add a product header component to the blocks interface diff --git a/packages/js/product-editor/changelog/add-37096-tests b/packages/js/product-editor/changelog/add-37096-tests new file mode 100644 index 00000000000..a95e829ad3d --- /dev/null +++ b/packages/js/product-editor/changelog/add-37096-tests @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add tests around product block editor tabs diff --git a/packages/js/product-editor/changelog/add-37098_add_product_list_price_block b/packages/js/product-editor/changelog/add-37098_add_product_list_price_block new file mode 100644 index 00000000000..6ee3c274aa8 --- /dev/null +++ b/packages/js/product-editor/changelog/add-37098_add_product_list_price_block @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add new pricing block to the product editor package. diff --git a/packages/js/product-editor/changelog/add-37103 b/packages/js/product-editor/changelog/add-37103 new file mode 100644 index 00000000000..b555a67c8ae --- /dev/null +++ b/packages/js/product-editor/changelog/add-37103 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add summary block diff --git a/packages/js/product-editor/changelog/add-toggle-content-block-37253 b/packages/js/product-editor/changelog/add-toggle-content-block-37253 new file mode 100644 index 00000000000..f39042fffd4 --- /dev/null +++ b/packages/js/product-editor/changelog/add-toggle-content-block-37253 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Adding Collapsible block with support for flexible rendering. diff --git a/packages/js/product-editor/changelog/update-37244-37245 b/packages/js/product-editor/changelog/update-37244-37245 new file mode 100644 index 00000000000..0ec9a60137d --- /dev/null +++ b/packages/js/product-editor/changelog/update-37244-37245 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Remove the product block breadcrumbs and sidebar inspector diff --git a/packages/js/product-editor/changelog/update-product-page-add-hook-37281 b/packages/js/product-editor/changelog/update-product-page-add-hook-37281 new file mode 100644 index 00000000000..0be0cab8030 --- /dev/null +++ b/packages/js/product-editor/changelog/update-product-page-add-hook-37281 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Fix issue were template was not re-synced when switching between products. diff --git a/packages/js/product-editor/jest.config.json b/packages/js/product-editor/jest.config.json new file mode 100644 index 00000000000..91c0faef97f --- /dev/null +++ b/packages/js/product-editor/jest.config.json @@ -0,0 +1,4 @@ +{ + "rootDir": "./src", + "preset": "../../internal-js-tests/jest.config.js" +} diff --git a/packages/js/product-editor/package.json b/packages/js/product-editor/package.json index 677e915c674..cf58e1f8a63 100644 --- a/packages/js/product-editor/package.json +++ b/packages/js/product-editor/package.json @@ -36,6 +36,7 @@ "@woocommerce/data": "workspace:^4.1.0", "@woocommerce/navigation": "workspace:^8.1.0", "@woocommerce/number": "workspace:*", + "@woocommerce/settings": "^1.0.0", "@woocommerce/tracks": "workspace:^1.3.0", "@wordpress/block-editor": "^9.8.0", "@wordpress/blocks": "^12.3.0", @@ -57,8 +58,15 @@ "react-router-dom": "^6.3.0" }, "devDependencies": { + "@babel/core": "^7.21.3", + "@babel/runtime": "^7.17.2", + "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.3", + "@testing-library/react-hooks": "^8.0.1", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.4.1", "@types/react": "^17.0.2", + "@types/testing-library__jest-dom": "^5.14.3", "@types/wordpress__block-editor": "^7.0.0", "@types/wordpress__block-library": "^2.6.1", "@types/wordpress__blocks": "^11.0.7", @@ -90,10 +98,12 @@ }, "scripts": { "turbo:build": "pnpm run build:js && pnpm run build:css", + "turbo:test": "jest --config ./jest.config.json", "prepare": "composer install", "changelog": "composer exec -- changelogger", "clean": "pnpm exec rimraf tsconfig.tsbuildinfo build build-*", "build": "pnpm -w exec turbo run turbo:build --filter=$npm_package_name", + "test": "pnpm -w exec turbo run turbo:test --filter=$npm_package_name", "lint": "eslint src", "build:js": "tsc --build ./tsconfig.json ./tsconfig-cjs.json", "build:css": "webpack", diff --git a/packages/js/product-editor/src/components/block-editor/block-editor.tsx b/packages/js/product-editor/src/components/block-editor/block-editor.tsx index 67def21c632..b25a6c9059b 100644 --- a/packages/js/product-editor/src/components/block-editor/block-editor.tsx +++ b/packages/js/product-editor/src/components/block-editor/block-editor.tsx @@ -12,9 +12,6 @@ import { Product } from '@woocommerce/data'; import { useSelect, select as WPSelect } from '@wordpress/data'; import { uploadMedia } from '@wordpress/media-utils'; import { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore No types for this exist yet. - BlockBreadcrumb, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore No types for this exist yet. BlockContextProvider, @@ -24,7 +21,6 @@ import { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore No types for this exist yet. BlockTools, - BlockInspector, EditorSettings, EditorBlockListSettings, WritingFlow, @@ -41,7 +37,6 @@ import { /** * Internal dependencies */ -import { Sidebar } from '../sidebar'; import { Tabs } from '../tabs'; type BlockEditorProps = { @@ -99,7 +94,7 @@ export function BlockEditor( { synchronizeBlocksWithTemplate( [], _settings?.template ), {} ); - }, [] ); + }, [ product.id ] ); if ( ! blocks ) { return null; @@ -115,10 +110,6 @@ export function BlockEditor( { settings={ settings } > - - - -
{ /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */ } { /* @ts-ignore No types for this exist yet. */ } diff --git a/packages/js/product-editor/src/components/collapsible-block/block.json b/packages/js/product-editor/src/components/collapsible-block/block.json new file mode 100644 index 00000000000..d0a6e6deac5 --- /dev/null +++ b/packages/js/product-editor/src/components/collapsible-block/block.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "woocommerce/collapsible", + "title": "Collapsible", + "category": "widgets", + "description": "Container with collapsible inner blocks.", + "textdomain": "default", + "attributes": { + "toggleText": { + "type": "string" + }, + "initialCollapsed": { + "type": "boolean" + }, + "persistRender": { + "type": "boolean" + } + }, + "supports": { + "align": false, + "html": false, + "multiple": true, + "reusable": false, + "inserter": false, + "lock": false + } +} diff --git a/packages/js/product-editor/src/components/collapsible-block/edit.tsx b/packages/js/product-editor/src/components/collapsible-block/edit.tsx new file mode 100644 index 00000000000..d4d0f743bf1 --- /dev/null +++ b/packages/js/product-editor/src/components/collapsible-block/edit.tsx @@ -0,0 +1,24 @@ +/** + * External dependencies + */ +import { CollapsibleContent } from '@woocommerce/components'; +import type { BlockAttributes } from '@wordpress/blocks'; +import { createElement } from '@wordpress/element'; +import { InnerBlocks, useBlockProps } from '@wordpress/block-editor'; + +export function Edit( { attributes }: { attributes: BlockAttributes } ) { + const blockProps = useBlockProps(); + const { toggleText, initialCollapsed, persistRender = true } = attributes; + + return ( +
+ + + +
+ ); +} diff --git a/packages/js/product-editor/src/components/collapsible-block/index.ts b/packages/js/product-editor/src/components/collapsible-block/index.ts new file mode 100644 index 00000000000..43b3aabdc22 --- /dev/null +++ b/packages/js/product-editor/src/components/collapsible-block/index.ts @@ -0,0 +1,18 @@ +/** + * Internal dependencies + */ +import { initBlock } from '../../utils'; +import metadata from './block.json'; +import { Edit } from './edit'; + +const { name } = metadata; + +export { metadata, name }; + +export const settings = { + example: {}, + edit: Edit, +}; + +export const init = () => + initBlock( { name, metadata: metadata as never, settings } ); diff --git a/packages/js/product-editor/src/components/details-name-block/index.ts b/packages/js/product-editor/src/components/details-name-block/index.ts index f0c73e48b2b..59d35906a12 100644 --- a/packages/js/product-editor/src/components/details-name-block/index.ts +++ b/packages/js/product-editor/src/components/details-name-block/index.ts @@ -14,4 +14,9 @@ export const settings = { edit: Edit, }; -export const init = () => initBlock( { name, metadata, settings } ); +export const init = () => + initBlock( { + name, + metadata: metadata as never, + settings, + } ); diff --git a/packages/js/product-editor/src/components/details-summary-block/block.json b/packages/js/product-editor/src/components/details-summary-block/block.json new file mode 100644 index 00000000000..003cd6841e9 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/block.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "woocommerce/product-summary", + "title": "Product summary", + "category": "widgets", + "description": "The product summary.", + "keywords": [ "products", "summary", "excerpt" ], + "textdomain": "default", + "attributes": { + "align": { + "type": "string" + }, + "direction": { + "type": "string", + "enum": [ "ltr", "rtl" ] + }, + "label": { + "type": "string" + } + }, + "supports": { + "align": false, + "html": false, + "multiple": false, + "reusable": false, + "inserter": false, + "lock": false + } +} diff --git a/packages/js/product-editor/src/components/details-summary-block/constants.ts b/packages/js/product-editor/src/components/details-summary-block/constants.ts new file mode 100644 index 00000000000..68dcf773353 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/constants.ts @@ -0,0 +1,33 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { + alignCenter, + alignJustify, + alignLeft, + alignRight, +} from '@wordpress/icons'; + +export const ALIGNMENT_CONTROLS = [ + { + icon: alignLeft, + title: __( 'Align text left', 'woocommerce' ), + align: 'left', + }, + { + icon: alignCenter, + title: __( 'Align text center', 'woocommerce' ), + align: 'center', + }, + { + icon: alignRight, + title: __( 'Align text right', 'woocommerce' ), + align: 'right', + }, + { + icon: alignJustify, + title: __( 'Align text justify', 'woocommerce' ), + align: 'justify', + }, +]; diff --git a/packages/js/product-editor/src/components/details-summary-block/edit.tsx b/packages/js/product-editor/src/components/details-summary-block/edit.tsx new file mode 100644 index 00000000000..7490bbb4343 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/edit.tsx @@ -0,0 +1,90 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { createElement } from '@wordpress/element'; +import { BlockEditProps } from '@wordpress/blocks'; +import { BaseControl } from '@wordpress/components'; +import { useEntityProp } from '@wordpress/core-data'; +import uniqueId from 'lodash/uniqueId'; +import classNames from 'classnames'; +import { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore No types for this exist yet. + AlignmentControl, + BlockControls, + RichText, + useBlockProps, +} from '@wordpress/block-editor'; + +/** + * Internal dependencies + */ +import { ParagraphRTLControl } from './paragraph-rtl-control'; +import { SummaryAttributes } from './types'; +import { ALIGNMENT_CONTROLS } from './constants'; + +export function Edit( { + attributes, + setAttributes, +}: BlockEditProps< SummaryAttributes > ) { + const { align, direction, label } = attributes; + const blockProps = useBlockProps( { + style: { direction }, + } ); + const id = uniqueId(); + const [ summary, setSummary ] = useEntityProp< string >( + 'postType', + 'product', + 'short_description' + ); + + function handleAlignmentChange( value: SummaryAttributes[ 'align' ] ) { + setAttributes( { align: value } ); + } + + function handleDirectionChange( value: SummaryAttributes[ 'direction' ] ) { + setAttributes( { direction: value } ); + } + + return ( +
+ { /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */ } + { /* @ts-ignore No types for this exist yet. */ } + + + + + + + + + +
+ ); +} diff --git a/packages/js/product-editor/src/components/details-summary-block/index.ts b/packages/js/product-editor/src/components/details-summary-block/index.ts new file mode 100644 index 00000000000..aa9e35a168c --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/index.ts @@ -0,0 +1,30 @@ +/** + * External dependencies + */ +import { BlockConfiguration } from '@wordpress/blocks'; + +/** + * Internal dependencies + */ +import { initBlock } from '../../utils'; +import blockConfiguration from './block.json'; +import { Edit } from './edit'; +import { SummaryAttributes } from './types'; + +const { name, ...metadata } = + blockConfiguration as BlockConfiguration< SummaryAttributes >; + +export { name, metadata }; + +export const settings = { + example: {}, + edit: Edit, +}; + +export function init() { + return initBlock< SummaryAttributes >( { + name, + metadata, + settings, + } ); +} diff --git a/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/index.ts b/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/index.ts new file mode 100644 index 00000000000..122d0571e26 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/index.ts @@ -0,0 +1,2 @@ +export * from './paragraph-rtl-control'; +export * from './types'; diff --git a/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/paragraph-rtl-control.tsx b/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/paragraph-rtl-control.tsx new file mode 100644 index 00000000000..40a731244f4 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/paragraph-rtl-control.tsx @@ -0,0 +1,40 @@ +/** + * External dependencies + */ +import { createElement, Fragment } from '@wordpress/element'; +import { ToolbarButton } from '@wordpress/components'; +import { _x, isRTL } from '@wordpress/i18n'; +import { formatLtr } from '@wordpress/icons'; + +/** + * Internal dependencies + */ +import { ParagraphRTLControlProps } from './types'; + +export function ParagraphRTLControl( { + direction, + onChange, +}: ParagraphRTLControlProps ) { + function handleClick() { + if ( typeof onChange === 'function' ) { + onChange( direction === 'ltr' ? undefined : 'ltr' ); + } + } + + return ( + <> + { isRTL() && ( + + ) } + + ); +} diff --git a/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/types.ts b/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/types.ts new file mode 100644 index 00000000000..4a5f8bf0fa2 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/paragraph-rtl-control/types.ts @@ -0,0 +1,11 @@ +/** + * Internal dependencies + */ +import { SummaryAttributes } from '../types'; + +export type ParagraphRTLControlProps = Pick< + SummaryAttributes, + 'direction' +> & { + onChange( direction?: SummaryAttributes[ 'direction' ] ): void; +}; diff --git a/packages/js/product-editor/src/components/details-summary-block/style.scss b/packages/js/product-editor/src/components/details-summary-block/style.scss new file mode 100644 index 00000000000..54ccfea0942 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/style.scss @@ -0,0 +1,6 @@ +// This alignment class does not exists in +// https://github.com/WordPress/gutenberg/blob/trunk/packages/block-library/src/common.scss +.has-text-align-justify { + /*rtl:ignore*/ + text-align: justify; +} diff --git a/packages/js/product-editor/src/components/details-summary-block/types.ts b/packages/js/product-editor/src/components/details-summary-block/types.ts new file mode 100644 index 00000000000..9d20d494fb4 --- /dev/null +++ b/packages/js/product-editor/src/components/details-summary-block/types.ts @@ -0,0 +1,5 @@ +export type SummaryAttributes = { + align: 'left' | 'center' | 'right' | 'justify'; + direction: 'ltr' | 'rtl'; + label: string; +}; diff --git a/packages/js/product-editor/src/components/edit-product-link-modal/test/edit-product-link-modal.test.tsx b/packages/js/product-editor/src/components/edit-product-link-modal/test/edit-product-link-modal.test.tsx index d9b181ce7ad..d134dfddf8b 100644 --- a/packages/js/product-editor/src/components/edit-product-link-modal/test/edit-product-link-modal.test.tsx +++ b/packages/js/product-editor/src/components/edit-product-link-modal/test/edit-product-link-modal.test.tsx @@ -11,8 +11,8 @@ import { createElement } from '@wordpress/element'; */ import { EditProductLinkModal } from '../'; -jest.mock( '@woocommerce/product-editor', () => ( { - __experimentalUseProductHelper: jest.fn().mockReturnValue( { +jest.mock( '../../../hooks/use-product-helper', () => ( { + useProductHelper: jest.fn().mockReturnValue( { updateProductWithStatus: jest.fn(), isUpdatingDraft: jest.fn(), isUpdatingPublished: jest.fn(), diff --git a/packages/js/product-editor/src/components/editor/editor.tsx b/packages/js/product-editor/src/components/editor/editor.tsx index 4e8d6c331ee..2f93b69b7b2 100644 --- a/packages/js/product-editor/src/components/editor/editor.tsx +++ b/packages/js/product-editor/src/components/editor/editor.tsx @@ -6,13 +6,12 @@ import { EditorSettings, EditorBlockListSettings, } from '@wordpress/block-editor'; -import { SlotFillProvider } from '@wordpress/components'; +import { Popover, SlotFillProvider } from '@wordpress/components'; import { Product } from '@woocommerce/data'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore No types for this exist yet. // eslint-disable-next-line @woocommerce/dependency-group import { EntityProvider } from '@wordpress/core-data'; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore No types for this exist yet. // eslint-disable-next-line @woocommerce/dependency-group @@ -26,14 +25,15 @@ import { FullscreenMode, InterfaceSkeleton } from '@wordpress/interface'; * Internal dependencies */ import { Header } from '../header'; -import { Sidebar } from '../sidebar'; import { BlockEditor } from '../block-editor'; import { initBlocks } from './init-blocks'; initBlocks(); + export type ProductEditorSettings = Partial< EditorSettings & EditorBlockListSettings >; + type EditorProps = { product: Product; settings: ProductEditorSettings | undefined; @@ -47,8 +47,12 @@ export function Editor( { product, settings }: EditorProps ) { } - sidebar={ } + header={ +
+ } content={ } /> + + diff --git a/packages/js/product-editor/src/components/editor/init-blocks.ts b/packages/js/product-editor/src/components/editor/init-blocks.ts index c91b20202e3..f55760f5fce 100644 --- a/packages/js/product-editor/src/components/editor/init-blocks.ts +++ b/packages/js/product-editor/src/components/editor/init-blocks.ts @@ -1,12 +1,24 @@ +/** + * External dependencies + */ +import { registerCoreBlocks } from '@wordpress/block-library'; + /** * Internal dependencies */ import { init as initName } from '../details-name-block'; +import { init as initSummary } from '../details-summary-block'; import { init as initSection } from '../section'; import { init as initTab } from '../tab'; +import { init as initPricing } from '../pricing-block'; +import { init as initCollapsible } from '../collapsible-block'; export const initBlocks = () => { + registerCoreBlocks(); initName(); + initSummary(); initSection(); initTab(); + initPricing(); + initCollapsible(); }; diff --git a/packages/js/product-editor/src/components/header/header.tsx b/packages/js/product-editor/src/components/header/header.tsx index 3a202f43cdc..65270bd1346 100644 --- a/packages/js/product-editor/src/components/header/header.tsx +++ b/packages/js/product-editor/src/components/header/header.tsx @@ -1,14 +1,68 @@ /** * External dependencies */ -import { __ } from '@wordpress/i18n'; +import { Product } from '@woocommerce/data'; +import { Button } from '@wordpress/components'; +import { useDispatch, useSelect } from '@wordpress/data'; import { createElement } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { navigateTo, getNewPath } from '@woocommerce/navigation'; + +/** + * Internal dependencies + */ +import { AUTO_DRAFT_NAME, getHeaderTitle } from '../../utils'; export type HeaderProps = { - title: string; + productId: number; + productName: string; }; -export function Header( { title }: HeaderProps ) { +export function Header( { productId, productName }: HeaderProps ) { + const { isProductLocked, isSaving, editedProductName } = useSelect( + ( select ) => { + const { isSavingEntityRecord, getEditedEntityRecord } = + select( 'core' ); + const { isPostSavingLocked } = select( 'core/editor' ); + + const product: Product = getEditedEntityRecord( + 'postType', + 'product', + productId + ); + + return { + isProductLocked: isPostSavingLocked(), + isSaving: isSavingEntityRecord( + 'postType', + 'product', + productId + ), + editedProductName: product?.name, + }; + }, + [ productId ] + ); + + const isDisabled = isProductLocked || isSaving; + const isCreating = productName === AUTO_DRAFT_NAME; + + const { saveEditedEntityRecord } = useDispatch( 'core' ); + + function handleSave() { + saveEditedEntityRecord< Product >( + 'postType', + 'product', + productId + ).then( ( response ) => { + if ( isCreating ) { + navigateTo( { + url: getNewPath( {}, `/product/${ response.id }` ), + } ); + } + } ); + } + return (
-

{ title }

+

+ { getHeaderTitle( editedProductName, productName ) } +

+ +
+ +
); } diff --git a/packages/js/product-editor/src/components/header/style.scss b/packages/js/product-editor/src/components/header/style.scss index 79b59a277ad..a91b0280e7c 100644 --- a/packages/js/product-editor/src/components/header/style.scss +++ b/packages/js/product-editor/src/components/header/style.scss @@ -3,4 +3,8 @@ display: flex; align-items: center; padding: 0 $gap; + + &__actions { + margin-left: auto; + } } diff --git a/packages/js/product-editor/src/components/pricing-block/block.json b/packages/js/product-editor/src/components/pricing-block/block.json new file mode 100644 index 00000000000..9ca3884ba5f --- /dev/null +++ b/packages/js/product-editor/src/components/pricing-block/block.json @@ -0,0 +1,29 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "woocommerce/product-pricing", + "description": "A product price block with currency display.", + "title": "Product pricing", + "category": "widgets", + "keywords": [ "products", "price" ], + "textdomain": "default", + "attributes": { + "name": { + "type": "string" + }, + "label": { + "type": "string" + }, + "showPricingSection": { + "type": "boolean" + } + }, + "supports": { + "align": false, + "html": false, + "multiple": false, + "reusable": false, + "inserter": false, + "lock": false + } +} diff --git a/packages/js/product-editor/src/components/pricing-block/edit.tsx b/packages/js/product-editor/src/components/pricing-block/edit.tsx new file mode 100644 index 00000000000..b9b01ed1445 --- /dev/null +++ b/packages/js/product-editor/src/components/pricing-block/edit.tsx @@ -0,0 +1,89 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { createElement, useContext, Fragment } from '@wordpress/element'; +import interpolateComponents from '@automattic/interpolate-components'; +import { Link } from '@woocommerce/components'; +import { useBlockProps } from '@wordpress/block-editor'; +import { useEntityProp } from '@wordpress/core-data'; +import { BlockAttributes } from '@wordpress/blocks'; +import { CurrencyContext } from '@woocommerce/currency'; +import { getSetting } from '@woocommerce/settings'; +import { recordEvent } from '@woocommerce/tracks'; +import { + BaseControl, + // @ts-expect-error `__experimentalInputControl` does exist. + __experimentalInputControl as InputControl, +} from '@wordpress/components'; + +/** + * Internal dependencies + */ +import { formatCurrencyDisplayValue } from '../../utils'; +import { useCurrencyInputProps } from '../../hooks/use-currency-input-props'; + +export function Edit( { attributes }: { attributes: BlockAttributes } ) { + const blockProps = useBlockProps(); + const { name, label, showPricingSection = false } = attributes; + const [ regularPrice, setRegularPrice ] = useEntityProp< string >( + 'postType', + 'product', + name + ); + const context = useContext( CurrencyContext ); + const { getCurrencyConfig, formatAmount } = context; + const currencyConfig = getCurrencyConfig(); + const inputProps = useCurrencyInputProps( { + value: regularPrice, + setValue: setRegularPrice, + } ); + + const taxSettingsElement = showPricingSection + ? interpolateComponents( { + mixedString: __( + 'Manage more settings in {{link}}Pricing.{{/link}}', + 'woocommerce' + ), + components: { + link: ( + { + recordEvent( + 'product_pricing_list_price_help_tax_settings_click' + ); + } } + > + <> + + ), + }, + } ) + : null; + + return ( +
+ + + +
+ ); +} diff --git a/packages/js/product-editor/src/components/pricing-block/index.ts b/packages/js/product-editor/src/components/pricing-block/index.ts new file mode 100644 index 00000000000..59d35906a12 --- /dev/null +++ b/packages/js/product-editor/src/components/pricing-block/index.ts @@ -0,0 +1,22 @@ +/** + * Internal dependencies + */ +import { initBlock } from '../../utils'; +import metadata from './block.json'; +import { Edit } from './edit'; + +const { name } = metadata; + +export { metadata, name }; + +export const settings = { + example: {}, + edit: Edit, +}; + +export const init = () => + initBlock( { + name, + metadata: metadata as never, + settings, + } ); diff --git a/packages/js/product-editor/src/components/sidebar/index.ts b/packages/js/product-editor/src/components/sidebar/index.ts deleted file mode 100644 index b2ba9a43c5e..00000000000 --- a/packages/js/product-editor/src/components/sidebar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './sidebar'; diff --git a/packages/js/product-editor/src/components/sidebar/sidebar.tsx b/packages/js/product-editor/src/components/sidebar/sidebar.tsx deleted file mode 100644 index 369cdb6636f..00000000000 --- a/packages/js/product-editor/src/components/sidebar/sidebar.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/** - * External dependencies - */ -import { __ } from '@wordpress/i18n'; -import { createElement } from '@wordpress/element'; -import { createSlotFill, Panel } from '@wordpress/components'; - -const { Slot: InspectorSlot, Fill: InspectorFill } = createSlotFill( - 'ProductBlockEditorSidebarInspector' -); - -export function Sidebar() { - return ( -
- - - -
- ); -} - -Sidebar.InspectorFill = InspectorFill; diff --git a/packages/js/product-editor/src/components/tab/edit.tsx b/packages/js/product-editor/src/components/tab/edit.tsx index a7bf3586b55..226dbd92ea8 100644 --- a/packages/js/product-editor/src/components/tab/edit.tsx +++ b/packages/js/product-editor/src/components/tab/edit.tsx @@ -17,7 +17,7 @@ export function Edit( { }: { attributes: BlockAttributes; context?: { - selectedTab?: string; + selectedTab?: string | null; }; } ) { const blockProps = useBlockProps(); diff --git a/packages/js/product-editor/src/components/tabs/test/tabs.spec.tsx b/packages/js/product-editor/src/components/tabs/test/tabs.spec.tsx new file mode 100644 index 00000000000..615f50cc46a --- /dev/null +++ b/packages/js/product-editor/src/components/tabs/test/tabs.spec.tsx @@ -0,0 +1,160 @@ +/** + * External dependencies + */ +import { render, fireEvent } from '@testing-library/react'; +import { getQuery, navigateTo } from '@woocommerce/navigation'; +import React, { createElement } from 'react'; +import { SlotFillProvider } from '@wordpress/components'; +import { useState } from '@wordpress/element'; + +/** + * Internal dependencies + */ +import { Tabs } from '../'; +import { Edit as Tab } from '../../tab/edit'; + +jest.mock( '@wordpress/block-editor', () => ( { + ...jest.requireActual( '@wordpress/block-editor' ), + useBlockProps: jest.fn(), +} ) ); + +jest.mock( '@woocommerce/navigation', () => ( { + ...jest.requireActual( '@woocommerce/navigation' ), + navigateTo: jest.fn(), + getQuery: jest.fn().mockReturnValue( {} ), +} ) ); + +function MockTabs( { onChange = jest.fn() } ) { + const [ selected, setSelected ] = useState< string | null >( null ); + const mockContext = { + selectedTab: selected, + }; + + return ( + + { + setSelected( tabId ); + onChange( tabId ); + } } + /> + + + + + ); +} + +describe( 'Tabs', () => { + beforeEach( () => { + ( getQuery as jest.Mock ).mockReturnValue( { + tab: null, + } ); + } ); + + it( 'should render tab buttons added to the slot', () => { + const { queryByText } = render( ); + expect( queryByText( 'Test button 1' ) ).toBeInTheDocument(); + expect( queryByText( 'Test button 2' ) ).toBeInTheDocument(); + } ); + + it( 'should set the first tab as active initially', () => { + const { queryByText } = render( ); + expect( queryByText( 'Test button 1' ) ).toHaveAttribute( + 'aria-selected', + 'true' + ); + expect( queryByText( 'Test button 2' ) ).toHaveAttribute( + 'aria-selected', + 'false' + ); + } ); + + it( 'should navigate to a new URL when a tab is clicked', () => { + const { getByText } = render( ); + const button = getByText( 'Test button 2' ); + fireEvent.click( button ); + + expect( navigateTo ).toHaveBeenLastCalledWith( { + url: 'admin.php?page=wc-admin&tab=test2', + } ); + } ); + + it( 'should select the tab provided in the URL initially', () => { + ( getQuery as jest.Mock ).mockReturnValue( { + tab: 'test2', + } ); + + const { getByText } = render( ); + + expect( getByText( 'Test button 2' ) ).toHaveAttribute( + 'aria-selected', + 'true' + ); + } ); + + it( 'should select the tab provided on URL change', () => { + const { getByText, rerender } = render( ); + + ( getQuery as jest.Mock ).mockReturnValue( { + tab: 'test3', + } ); + + rerender( ); + + expect( getByText( 'Test button 3' ) ).toHaveAttribute( + 'aria-selected', + 'true' + ); + } ); + + it( 'should call the onChange props when changing', async () => { + const mockOnChange = jest.fn(); + const { rerender } = render( ); + + expect( mockOnChange ).toHaveBeenCalledWith( 'test1' ); + + ( getQuery as jest.Mock ).mockReturnValue( { + tab: 'test2', + } ); + + rerender( ); + + expect( mockOnChange ).toHaveBeenCalledWith( 'test2' ); + } ); + + it( 'should add a class to the initially selected tab panel', async () => { + const { getByRole } = render( ); + const panel1 = getByRole( 'tabpanel', { name: 'Test button 1' } ); + const panel2 = getByRole( 'tabpanel', { name: 'Test button 2' } ); + + expect( panel1.classList ).toContain( 'is-selected' ); + expect( panel2.classList ).not.toContain( 'is-selected' ); + } ); + + it( 'should add a class to the newly selected tab panel', async () => { + const { getByText, getByRole, rerender } = render( ); + const button = getByText( 'Test button 2' ); + fireEvent.click( button ); + const panel1 = getByRole( 'tabpanel', { name: 'Test button 1' } ); + const panel2 = getByRole( 'tabpanel', { name: 'Test button 2' } ); + + ( getQuery as jest.Mock ).mockReturnValue( { + tab: 'test2', + } ); + + rerender( ); + + expect( panel1.classList ).not.toContain( 'is-selected' ); + expect( panel2.classList ).toContain( 'is-selected' ); + } ); +} ); diff --git a/packages/js/product-editor/src/hooks/index.ts b/packages/js/product-editor/src/hooks/index.ts index 700bcf73864..6899f9e1335 100644 --- a/packages/js/product-editor/src/hooks/index.ts +++ b/packages/js/product-editor/src/hooks/index.ts @@ -1,2 +1,3 @@ export { useProductHelper as __experimentalUseProductHelper } from './use-product-helper'; export { useVariationsOrder as __experimentalUseVariationsOrder } from './use-variations-order'; +export { useCurrencyInputProps as __experimentalUseCurrencyInputProps } from './use-currency-input-props'; diff --git a/packages/js/product-editor/src/hooks/use-currency-input-props.ts b/packages/js/product-editor/src/hooks/use-currency-input-props.ts new file mode 100644 index 00000000000..da6b53d573a --- /dev/null +++ b/packages/js/product-editor/src/hooks/use-currency-input-props.ts @@ -0,0 +1,77 @@ +/** + * External dependencies + */ +import { CurrencyContext } from '@woocommerce/currency'; +import { useContext } from '@wordpress/element'; + +/** + * Internal dependencies + */ +import { useProductHelper } from './use-product-helper'; + +export type CurrencyInputProps = { + prefix: string; + className: string; + sanitize: ( value: string | number ) => string; + onFocus: ( event: React.FocusEvent< HTMLInputElement > ) => void; + onKeyUp: ( event: React.KeyboardEvent< HTMLInputElement > ) => void; +}; + +type Props = { + value: string; + setValue: ( value: string ) => void; + onFocus?: ( event: React.FocusEvent< HTMLInputElement > ) => void; + onKeyUp?: ( event: React.KeyboardEvent< HTMLInputElement > ) => void; +}; + +export const useCurrencyInputProps = ( { + value, + setValue, + onFocus, + onKeyUp, +}: Props ) => { + const { sanitizePrice } = useProductHelper(); + + const context = useContext( CurrencyContext ); + const { getCurrencyConfig } = context; + const currencyConfig = getCurrencyConfig(); + + const currencyInputProps: CurrencyInputProps = { + prefix: currencyConfig.symbol, + className: 'half-width-field components-currency-control', + sanitize: ( val: string | number ) => { + return sanitizePrice( String( val ) ); + }, + onFocus( event: React.FocusEvent< HTMLInputElement > ) { + // In some browsers like safari .select() function inside + // the onFocus event doesn't work as expected because it + // conflicts with onClick the first time user click the + // input. Using setTimeout defers the text selection and + // avoid the unexpected behaviour. + setTimeout( + function deferSelection( element: HTMLInputElement ) { + element.select(); + }, + 0, + event.currentTarget + ); + if ( onFocus ) { + onFocus( event ); + } + }, + onKeyUp( event: React.KeyboardEvent< HTMLInputElement > ) { + const amount = Number.parseFloat( sanitizePrice( value || '0' ) ); + const step = Number( event.currentTarget.step || '1' ); + if ( event.code === 'ArrowUp' ) { + setValue( String( amount + step ) ); + } + if ( event.code === 'ArrowDown' ) { + setValue( String( amount - step ) ); + } + if ( onKeyUp ) { + onKeyUp( event ); + } + }, + }; + return currencyInputProps; +}; diff --git a/packages/js/product-editor/src/hooks/use-validation/README.md b/packages/js/product-editor/src/hooks/use-validation/README.md new file mode 100644 index 00000000000..2c8b83977db --- /dev/null +++ b/packages/js/product-editor/src/hooks/use-validation/README.md @@ -0,0 +1,41 @@ +# useValidation + +This custom hook uses the helper functions `const { lockPostSaving, unlockPostSaving } = useDispatch( 'core/editor' );` to lock/unlock the current editing product before saving it. + +## Usage + +Syncronous validation + +```typescript +import { useCallback } from '@wordpress/element'; +import { useValidation } from '@woocommerce/product-editor'; + +const product = ...; + +const validateTitle = useCallback( (): boolean => { + if ( product.title.length < 2 ) { + return false; + } + return true; +}, [ product.title ] ); + +const isTitleValid = useValidation( 'product/title', validateTitle ); +``` + +Asyncronous validation + +```typescript +import { useCallback } from '@wordpress/element'; +import { useValidation } from '@woocommerce/product-editor'; + +const product = ...; + +const validateSlug = useCallback( async (): Promise< boolean > => { + return fetch( `.../validate-slug?slug=${ product.slug }` ) + .then( ( response ) => response.json() ) + .then( ( { isValid } ) => isValid ) + .catch( () => false ); +}, [ product.slug ] ); + +const isSlugValid = useValidation( 'product/slug', validateSlug ); +``` diff --git a/packages/js/product-editor/src/hooks/use-validation/index.ts b/packages/js/product-editor/src/hooks/use-validation/index.ts new file mode 100644 index 00000000000..a6a64cadb31 --- /dev/null +++ b/packages/js/product-editor/src/hooks/use-validation/index.ts @@ -0,0 +1 @@ +export * from './use-validation'; diff --git a/packages/js/product-editor/src/hooks/use-validation/test/use-validation.test.ts b/packages/js/product-editor/src/hooks/use-validation/test/use-validation.test.ts new file mode 100644 index 00000000000..1ea6903fea7 --- /dev/null +++ b/packages/js/product-editor/src/hooks/use-validation/test/use-validation.test.ts @@ -0,0 +1,95 @@ +/** + * External dependencies + */ +import { renderHook } from '@testing-library/react-hooks'; +import { useDispatch } from '@wordpress/data'; + +/** + * Internal dependencies + */ +import { useValidation } from '../use-validation'; + +jest.mock( '@wordpress/data', () => ( { + useDispatch: jest.fn(), +} ) ); + +describe( 'useValidation', () => { + const useDispatchMock = useDispatch as jest.Mock; + const lockPostSaving = jest.fn(); + const unlockPostSaving = jest.fn(); + + beforeEach( () => { + useDispatchMock.mockReturnValue( { + lockPostSaving, + unlockPostSaving, + } ); + } ); + + afterEach( () => { + jest.clearAllMocks(); + } ); + + describe( 'sync', () => { + it( 'should lock the editor if validate returns false', async () => { + const { result, waitForNextUpdate } = renderHook( () => + useValidation( 'product/name', () => false ) + ); + + await waitForNextUpdate(); + + expect( result.current ).toBeFalsy(); + expect( lockPostSaving ).toHaveBeenCalled(); + expect( unlockPostSaving ).not.toHaveBeenCalled(); + } ); + + it( 'should unlock the editor if validate returns true', async () => { + const { result, waitForNextUpdate } = renderHook( () => + useValidation( 'product/name', () => true ) + ); + + await waitForNextUpdate(); + + expect( result.current ).toBeTruthy(); + expect( lockPostSaving ).not.toHaveBeenCalled(); + expect( unlockPostSaving ).toHaveBeenCalled(); + } ); + } ); + + describe( 'async', () => { + it( 'should lock the editor if validate resolves false', async () => { + const { result, waitForNextUpdate } = renderHook( () => + useValidation( 'product/name', () => Promise.resolve( false ) ) + ); + + await waitForNextUpdate(); + + expect( result.current ).toBeFalsy(); + expect( lockPostSaving ).toHaveBeenCalled(); + expect( unlockPostSaving ).not.toHaveBeenCalled(); + } ); + + it( 'should lock the editor if validate rejects', async () => { + const { result, waitForNextUpdate } = renderHook( () => + useValidation( 'product/name', () => Promise.reject() ) + ); + + await waitForNextUpdate(); + + expect( result.current ).toBeFalsy(); + expect( lockPostSaving ).toHaveBeenCalled(); + expect( unlockPostSaving ).not.toHaveBeenCalled(); + } ); + + it( 'should unlock the editor if validate resolves true', async () => { + const { result, waitForNextUpdate } = renderHook( () => + useValidation( 'product/name', () => Promise.resolve( true ) ) + ); + + await waitForNextUpdate(); + + expect( result.current ).toBeTruthy(); + expect( lockPostSaving ).not.toHaveBeenCalled(); + expect( unlockPostSaving ).toHaveBeenCalled(); + } ); + } ); +} ); diff --git a/packages/js/product-editor/src/hooks/use-validation/use-validation.ts b/packages/js/product-editor/src/hooks/use-validation/use-validation.ts new file mode 100644 index 00000000000..76478ff8e5d --- /dev/null +++ b/packages/js/product-editor/src/hooks/use-validation/use-validation.ts @@ -0,0 +1,43 @@ +/** + * External dependencies + */ +import { useDispatch } from '@wordpress/data'; +import { useEffect, useState } from '@wordpress/element'; + +/** + * Signals that product saving is locked. + * + * @param lockName The namespace used to lock the product saving if validation fails. + * @param validate The validator function. + */ +export function useValidation( + lockName: string, + validate: () => boolean | Promise< boolean > +): boolean | undefined { + const [ isValid, setIsValid ] = useState< boolean | undefined >(); + const { lockPostSaving, unlockPostSaving } = useDispatch( 'core/editor' ); + + useEffect( () => { + let validationResponse = validate(); + + if ( typeof validationResponse === 'boolean' ) { + validationResponse = Promise.resolve( validationResponse ); + } + + validationResponse + .then( ( isValidationValid ) => { + if ( isValidationValid ) { + unlockPostSaving( lockName ); + } else { + lockPostSaving( lockName ); + } + setIsValid( isValidationValid ); + } ) + .catch( () => { + lockPostSaving( lockName ); + setIsValid( false ); + } ); + }, [ lockName, validate, lockPostSaving, unlockPostSaving ] ); + + return isValid; +} diff --git a/packages/js/product-editor/src/style.scss b/packages/js/product-editor/src/style.scss index 99f2ce949ee..508d0edf477 100644 --- a/packages/js/product-editor/src/style.scss +++ b/packages/js/product-editor/src/style.scss @@ -8,3 +8,4 @@ @import 'components/section/style.scss'; @import 'components/tab/style.scss'; @import 'components/tabs/style.scss'; +@import 'components/details-summary-block/style.scss'; diff --git a/packages/js/product-editor/src/utils/constants.ts b/packages/js/product-editor/src/utils/constants.ts index 0aa72fd516a..6c0b603d436 100644 --- a/packages/js/product-editor/src/utils/constants.ts +++ b/packages/js/product-editor/src/utils/constants.ts @@ -7,3 +7,4 @@ export const ADD_NEW_SHIPPING_CLASS_OPTION_VALUE = export const UNCATEGORIZED_CATEGORY_SLUG = 'uncategorized'; export const PRODUCT_VARIATION_TITLE_LIMIT = 32; export const STANDARD_RATE_TAX_CLASS_SLUG = 'standard'; +export const AUTO_DRAFT_NAME = 'AUTO-DRAFT'; diff --git a/packages/js/product-editor/src/utils/get-header-title.ts b/packages/js/product-editor/src/utils/get-header-title.ts new file mode 100644 index 00000000000..a0c6d712855 --- /dev/null +++ b/packages/js/product-editor/src/utils/get-header-title.ts @@ -0,0 +1,35 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import { AUTO_DRAFT_NAME } from './constants'; + +/** + * Get the header title using the product name. + * + * @param editedProductName Name value entered for the product. + * @param initialProductName Name already persisted to the database. + * @return The new title + */ +export const getHeaderTitle = ( + editedProductName: string, + initialProductName: string +): string => { + const isProductNameNotEmpty = Boolean( editedProductName ); + const isProductNameDirty = editedProductName !== initialProductName; + const isCreating = initialProductName === AUTO_DRAFT_NAME; + + if ( isProductNameNotEmpty && isProductNameDirty ) { + return editedProductName; + } + + if ( isCreating ) { + return __( 'Add new product', 'woocommerce' ); + } + + return initialProductName; +}; diff --git a/packages/js/product-editor/src/utils/get-product-stock-status.ts b/packages/js/product-editor/src/utils/get-product-stock-status.ts index 88ba69a46eb..9cc8f5419f3 100644 --- a/packages/js/product-editor/src/utils/get-product-stock-status.ts +++ b/packages/js/product-editor/src/utils/get-product-stock-status.ts @@ -51,7 +51,9 @@ export const getProductStockStatus = ( } if ( product.stock_status ) { - return PRODUCT_STOCK_STATUS_LABELS[ product.stock_status ]; + return PRODUCT_STOCK_STATUS_LABELS[ + product.stock_status as PRODUCT_STOCK_STATUS_KEYS + ]; } return PRODUCT_STOCK_STATUS_LABELS.instock; @@ -77,6 +79,8 @@ export const getProductStockStatusClass = ( return PRODUCT_STOCK_STATUS_CLASSES.outofstock; } return product.stock_status - ? PRODUCT_STOCK_STATUS_CLASSES[ product.stock_status ] + ? PRODUCT_STOCK_STATUS_CLASSES[ + product.stock_status as PRODUCT_STOCK_STATUS_KEYS + ] : ''; }; diff --git a/packages/js/product-editor/src/utils/get-product-title.ts b/packages/js/product-editor/src/utils/get-product-title.ts index 2f92e9d81b9..dc090527ca0 100644 --- a/packages/js/product-editor/src/utils/get-product-title.ts +++ b/packages/js/product-editor/src/utils/get-product-title.ts @@ -3,7 +3,10 @@ */ import { __ } from '@wordpress/i18n'; -export const AUTO_DRAFT_NAME = 'AUTO-DRAFT'; +/** + * Internal dependencies + */ +import { AUTO_DRAFT_NAME } from './constants'; /** * Get the product title for use in the header. diff --git a/packages/js/product-editor/src/utils/index.ts b/packages/js/product-editor/src/utils/index.ts index b2ddb029f36..67a0014effc 100644 --- a/packages/js/product-editor/src/utils/index.ts +++ b/packages/js/product-editor/src/utils/index.ts @@ -1,16 +1,18 @@ /** * Internal dependencies */ +import { AUTO_DRAFT_NAME } from './constants'; import { formatCurrencyDisplayValue } from './format-currency-display-value'; import { getCheckboxTracks } from './get-checkbox-tracks'; import { getCurrencySymbolProps } from './get-currency-symbol-props'; import { getDerivedProductType } from './get-derived-product-type'; +import { getHeaderTitle } from './get-header-title'; import { getProductStatus, PRODUCT_STATUS_LABELS } from './get-product-status'; import { getProductStockStatus, getProductStockStatusClass, } from './get-product-stock-status'; -import { getProductTitle, AUTO_DRAFT_NAME } from './get-product-title'; +import { getProductTitle } from './get-product-title'; import { getProductVariationTitle, getTruncatedProductVariationTitle, @@ -27,6 +29,7 @@ export { getCheckboxTracks, getCurrencySymbolProps, getDerivedProductType, + getHeaderTitle, getProductStatus, getProductStockStatus, getProductStockStatusClass, diff --git a/packages/js/product-editor/src/utils/init-blocks.ts b/packages/js/product-editor/src/utils/init-blocks.ts index b8dc4118138..06404008120 100644 --- a/packages/js/product-editor/src/utils/init-blocks.ts +++ b/packages/js/product-editor/src/utils/init-blocks.ts @@ -1,26 +1,31 @@ /** * External dependencies */ -import { BlockConfiguration, registerBlockType } from '@wordpress/blocks'; +import { + Block, + BlockConfiguration, + registerBlockType, +} from '@wordpress/blocks'; -interface BlockRepresentation { - name: string; - metadata: BlockConfiguration; - settings: Partial< BlockConfiguration >; +interface BlockRepresentation< T extends Record< string, object > > { + name?: string; + metadata: BlockConfiguration< T >; + settings: Partial< BlockConfiguration< T > >; } /** * Function to register an individual block. * - * @param {Object} block The block to be registered. - * - * @return {?WPBlockType} The block, if it has been successfully registered; - * otherwise `undefined`. + * @param block The block to be registered. + * @return The block, if it has been successfully registered; otherwise `undefined`. */ -export const initBlock = ( block: BlockRepresentation ) => { +export function initBlock< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + T extends Record< string, any > = Record< string, any > +>( block: BlockRepresentation< T > ): Block< T > | undefined { if ( ! block ) { return; } const { metadata, settings, name } = block; - return registerBlockType( { name, ...metadata }, settings ); -}; + return registerBlockType< T >( { name, ...metadata }, settings ); +} diff --git a/packages/js/product-editor/typings/global.d.ts b/packages/js/product-editor/typings/global.d.ts index 69abbdeff5e..3a27ae17ad8 100644 --- a/packages/js/product-editor/typings/global.d.ts +++ b/packages/js/product-editor/typings/global.d.ts @@ -6,4 +6,3 @@ declare global { /*~ If your module exports nothing, you'll need this line. Otherwise, delete it */ export {}; - diff --git a/packages/js/product-editor/typings/index.d.ts b/packages/js/product-editor/typings/index.d.ts new file mode 100644 index 00000000000..fa38181628c --- /dev/null +++ b/packages/js/product-editor/typings/index.d.ts @@ -0,0 +1,18 @@ +declare module '@woocommerce/settings' { + export declare function getAdminLink( path: string ): string; + export declare function getSetting< T >( + name: string, + fallback?: unknown, + filter = ( val: unknown, fb: unknown ) => + typeof val !== 'undefined' ? val : fb + ): T; +} + +declare module '@wordpress/core-data' { + function useEntityProp< T = unknown >( + kind: string, + name: string, + prop: string, + id?: string + ): [ T, ( value: T ) => void, T ]; +} diff --git a/plugins/woocommerce-admin/client/activity-panel/activity-panel.js b/plugins/woocommerce-admin/client/activity-panel/activity-panel.js index 308cf600904..d37363e0c7d 100644 --- a/plugins/woocommerce-admin/client/activity-panel/activity-panel.js +++ b/plugins/woocommerce-admin/client/activity-panel/activity-panel.js @@ -12,6 +12,7 @@ import { import { useSelect, useDispatch } from '@wordpress/data'; import { uniqueId, find } from 'lodash'; import { Icon, help as helpIcon, external } from '@wordpress/icons'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; import { H, Section } from '@woocommerce/components'; import { ONBOARDING_STORE_NAME, @@ -48,7 +49,6 @@ import { useActiveSetupTasklist } from '~/tasks'; import { LayoutContext } from '~/layout'; import { getSegmentsFromPath } from '~/utils/url-helpers'; import { FeedbackIcon } from '~/products/images/feedback-icon'; -import { STORE_KEY as CES_STORE_KEY } from '~/customer-effort-score-tracks/data/constants'; import { ProductFeedbackTour } from '~/guided-tours/add-product-feedback-tour'; const HelpPanel = lazy( () => diff --git a/plugins/woocommerce-admin/client/analytics/components/report-filters/index.js b/plugins/woocommerce-admin/client/analytics/components/report-filters/index.js index 3c4a5b691ef..c2313f1b4a6 100644 --- a/plugins/woocommerce-admin/client/analytics/components/report-filters/index.js +++ b/plugins/woocommerce-admin/client/analytics/components/report-filters/index.js @@ -6,6 +6,7 @@ import { compose } from '@wordpress/compose'; import PropTypes from 'prop-types'; import { omitBy, isUndefined, snakeCase } from 'lodash'; import { withSelect, withDispatch } from '@wordpress/data'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; import { ReportFilters as Filters } from '@woocommerce/components'; import { SETTINGS_STORE_NAME } from '@woocommerce/data'; import { @@ -19,7 +20,6 @@ import { CurrencyContext } from '@woocommerce/currency'; /** * Internal dependencies */ -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; import { LOCALE } from '~/utils/admin-settings'; class ReportFilters extends Component { diff --git a/plugins/woocommerce-admin/client/analytics/components/report-table/index.js b/plugins/woocommerce-admin/client/analytics/components/report-table/index.js index 9a40653b9ad..22b5dbe4803 100644 --- a/plugins/woocommerce-admin/client/analytics/components/report-table/index.js +++ b/plugins/woocommerce-admin/client/analytics/components/report-table/index.js @@ -10,6 +10,7 @@ import { withDispatch, withSelect } from '@wordpress/data'; import { get, noop, partial, uniq } from 'lodash'; import { __, sprintf } from '@wordpress/i18n'; import PropTypes from 'prop-types'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; import { CompareButton, Search, TableCard } from '@woocommerce/components'; import { getIdsFromQuery, @@ -39,7 +40,6 @@ import { recordEvent } from '@woocommerce/tracks'; import DownloadIcon from './download-icon'; import ReportError from '../report-error'; import { extendTableData } from './utils'; -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; import './style.scss'; const TABLE_FILTER = 'woocommerce_admin_report_table'; diff --git a/plugins/woocommerce-admin/client/analytics/report/categories/config.js b/plugins/woocommerce-admin/client/analytics/report/categories/config.js index 7db61624192..500a29907a8 100644 --- a/plugins/woocommerce-admin/client/analytics/report/categories/config.js +++ b/plugins/woocommerce-admin/client/analytics/report/categories/config.js @@ -4,12 +4,12 @@ import { __, _x } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; import { dispatch } from '@wordpress/data'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; /** * Internal dependencies */ import { getCategoryLabels } from '../../../lib/async-requests'; -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; const CATEGORY_REPORT_CHARTS_FILTER = 'woocommerce_admin_categories_report_charts'; diff --git a/plugins/woocommerce-admin/client/analytics/report/coupons/config.js b/plugins/woocommerce-admin/client/analytics/report/coupons/config.js index 4220e13f019..5a579020ae8 100644 --- a/plugins/woocommerce-admin/client/analytics/report/coupons/config.js +++ b/plugins/woocommerce-admin/client/analytics/report/coupons/config.js @@ -4,12 +4,12 @@ import { __, _x } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; import { dispatch } from '@wordpress/data'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; /** * Internal dependencies */ import { getCouponLabels } from '../../../lib/async-requests'; -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; const COUPON_REPORT_CHARTS_FILTER = 'woocommerce_admin_coupons_report_charts'; const COUPON_REPORT_FILTERS_FILTER = 'woocommerce_admin_coupons_report_filters'; diff --git a/plugins/woocommerce-admin/client/analytics/report/products/config.js b/plugins/woocommerce-admin/client/analytics/report/products/config.js index 1097ff28b96..320789d47a1 100644 --- a/plugins/woocommerce-admin/client/analytics/report/products/config.js +++ b/plugins/woocommerce-admin/client/analytics/report/products/config.js @@ -4,6 +4,7 @@ import { __, _x } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; import { dispatch } from '@wordpress/data'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; /** * Internal dependencies @@ -12,7 +13,6 @@ import { getProductLabels, getVariationLabels, } from '../../../lib/async-requests'; -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; const PRODUCTS_REPORT_CHARTS_FILTER = 'woocommerce_admin_products_report_charts'; diff --git a/plugins/woocommerce-admin/client/analytics/report/taxes/config.js b/plugins/woocommerce-admin/client/analytics/report/taxes/config.js index 49278680021..df83105cda1 100644 --- a/plugins/woocommerce-admin/client/analytics/report/taxes/config.js +++ b/plugins/woocommerce-admin/client/analytics/report/taxes/config.js @@ -3,6 +3,7 @@ */ import { __, _x } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; import { NAMESPACE } from '@woocommerce/data'; import { dispatch } from '@wordpress/data'; @@ -11,7 +12,6 @@ import { dispatch } from '@wordpress/data'; */ import { getRequestByIdString } from '../../../lib/async-requests'; import { getTaxCode } from './utils'; -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; const TAXES_REPORT_CHARTS_FILTER = 'woocommerce_admin_taxes_report_charts'; const TAXES_REPORT_FILTERS_FILTER = 'woocommerce_admin_taxes_report_filters'; diff --git a/plugins/woocommerce-admin/client/analytics/report/variations/config.js b/plugins/woocommerce-admin/client/analytics/report/variations/config.js index f53dee1e713..2aaa20dbc80 100644 --- a/plugins/woocommerce-admin/client/analytics/report/variations/config.js +++ b/plugins/woocommerce-admin/client/analytics/report/variations/config.js @@ -4,6 +4,7 @@ import { __, _x } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; import { dispatch } from '@wordpress/data'; +import { STORE_KEY as CES_STORE_KEY } from '@woocommerce/customer-effort-score'; /** * Internal dependencies @@ -13,7 +14,6 @@ import { getProductLabels, getVariationLabels, } from '../../../lib/async-requests'; -import { STORE_KEY as CES_STORE_KEY } from '../../../customer-effort-score-tracks/data/constants'; const VARIATIONS_REPORT_CHARTS_FILTER = 'woocommerce_admin_variations_report_charts'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/constants.ts b/plugins/woocommerce-admin/client/customer-effort-score-tracks/constants.ts deleted file mode 100644 index 4a7ee0b3609..00000000000 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const SHOWN_FOR_ACTIONS_OPTION_NAME = - 'woocommerce_ces_shown_for_actions'; -export const ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = - 'woocommerce_admin_install_timestamp'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/index.js b/plugins/woocommerce-admin/client/customer-effort-score-tracks/index.js deleted file mode 100644 index bd9b84cbbe4..00000000000 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { default as CustomerEffortScoreTracks } from './customer-effort-score-tracks'; -export { default as CustomerEffortScoreTracksContainer } from './customer-effort-score-tracks-container'; -export * from './customer-effort-score-modal-container.tsx'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx index d46f06190d2..453022a2ae8 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx +++ b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-ces-footer.tsx @@ -7,15 +7,17 @@ import { useDispatch, useSelect } from '@wordpress/data'; import { closeSmall } from '@wordpress/icons'; import { WooFooterItem } from '@woocommerce/admin-layout'; import { Pill } from '@woocommerce/components'; -import { ALLOW_TRACKING_OPTION_NAME } from '@woocommerce/customer-effort-score'; +import { + ALLOW_TRACKING_OPTION_NAME, + SHOWN_FOR_ACTIONS_OPTION_NAME, + STORE_KEY, +} from '@woocommerce/customer-effort-score'; import { OPTIONS_STORE_NAME } from '@woocommerce/data'; /** * Internal dependencies */ import './product-mvp-ces-footer.scss'; -import { SHOWN_FOR_ACTIONS_OPTION_NAME } from './constants'; -import { STORE_KEY } from './data/constants'; export const PRODUCT_MVP_CES_ACTION_OPTION_NAME = 'woocommerce_ces_product_mvp_ces_action'; diff --git a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx index 6dd829701ee..27b8d0f9f0a 100644 --- a/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx +++ b/plugins/woocommerce-admin/client/customer-effort-score-tracks/product-mvp-feedback-modal-container.tsx @@ -2,17 +2,15 @@ * External dependencies */ import { useDispatch, useSelect } from '@wordpress/data'; -import { ProductMVPFeedbackModal } from '@woocommerce/customer-effort-score'; +import { + ProductMVPFeedbackModal, + STORE_KEY, +} from '@woocommerce/customer-effort-score'; import { recordEvent } from '@woocommerce/tracks'; import { getAdminLink } from '@woocommerce/settings'; import { useFormContext } from '@woocommerce/components'; import { Product } from '@woocommerce/data'; -/** - * Internal dependencies - */ -import { STORE_KEY } from './data/constants'; - export const ProductMVPFeedbackModalContainer: React.FC = () => { const { values } = useFormContext< Product >(); const { hideProductMVPFeedbackModal } = useDispatch( STORE_KEY ); diff --git a/plugins/woocommerce-admin/client/homescreen/constants.js b/plugins/woocommerce-admin/client/homescreen/constants.js index b0b7575df8f..335e1bea6fe 100644 --- a/plugins/woocommerce-admin/client/homescreen/constants.js +++ b/plugins/woocommerce-admin/client/homescreen/constants.js @@ -9,9 +9,3 @@ export const WELCOME_MODAL_DISMISSED_OPTION_NAME = */ export const WELCOME_FROM_CALYPSO_MODAL_DISMISSED_OPTION_NAME = 'woocommerce_welcome_from_calypso_modal_dismissed'; - -/** - * WooCommerce Admin installation timestamp option name. - */ -export const WOOCOMMERCE_ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = - 'woocommerce_admin_install_timestamp'; diff --git a/plugins/woocommerce-admin/client/homescreen/mobile-app-modal/components/useJetpackPluginState.tsx b/plugins/woocommerce-admin/client/homescreen/mobile-app-modal/components/useJetpackPluginState.tsx index f8d1308f2ca..68d89e5b383 100644 --- a/plugins/woocommerce-admin/client/homescreen/mobile-app-modal/components/useJetpackPluginState.tsx +++ b/plugins/woocommerce-admin/client/homescreen/mobile-app-modal/components/useJetpackPluginState.tsx @@ -89,8 +89,7 @@ export const useJetpackPluginState = () => { ); } else if ( jetpackConnectionData && - jetpackConnectionData?.currentUser?.username !== - jetpackConnectionData?.connectionOwner + ! jetpackConnectionData?.currentUser?.isMaster ) { setPluginState( JetpackPluginStates.NOT_OWNER_OF_CONNECTION diff --git a/plugins/woocommerce-admin/client/index.js b/plugins/woocommerce-admin/client/index.js index 41a0866a6d8..67173157a26 100644 --- a/plugins/woocommerce-admin/client/index.js +++ b/plugins/woocommerce-admin/client/index.js @@ -3,6 +3,7 @@ */ import '@wordpress/notices'; import { render } from '@wordpress/element'; +import { CustomerEffortScoreTracksContainer } from '@woocommerce/customer-effort-score'; import { withCurrentUserHydration, withSettingsHydration, @@ -14,7 +15,6 @@ import { import './stylesheets/_index.scss'; import { getAdminSetting } from '~/utils/admin-settings'; import { PageLayout, EmbedLayout, PrimaryLayout as NoticeArea } from './layout'; -import { CustomerEffortScoreTracksContainer } from './customer-effort-score-tracks'; import { EmbeddedBodyLayout } from './embedded-body-layout'; import { WcAdminPaymentsGatewaysBannerSlot } from './payments/payments-settings-banner-slotfill'; import { WcAdminConflictErrorSlot } from './settings/conflict-error-slotfill.js'; diff --git a/plugins/woocommerce-admin/client/layout/index.js b/plugins/woocommerce-admin/client/layout/index.js index b3321181ad3..9a6344e09b0 100644 --- a/plugins/woocommerce-admin/client/layout/index.js +++ b/plugins/woocommerce-admin/client/layout/index.js @@ -17,7 +17,10 @@ import { Children, cloneElement } from 'react'; import PropTypes from 'prop-types'; import { get, isFunction, identity, memoize } from 'lodash'; import { parse } from 'qs'; -import { triggerExitPageCesSurvey } from '@woocommerce/customer-effort-score'; +import { + CustomerEffortScoreModalContainer, + triggerExitPageCesSurvey, +} from '@woocommerce/customer-effort-score'; import { getHistory, getQuery } from '@woocommerce/navigation'; import { PLUGINS_STORE_NAME, @@ -38,7 +41,6 @@ import { Header } from '../header'; import { Footer } from './footer'; import Notices from './notices'; import TransientNotices from './transient-notices'; -import { CustomerEffortScoreModalContainer } from '../customer-effort-score-tracks'; import { getAdminSetting } from '~/utils/admin-settings'; import '~/activity-panel'; import '~/mobile-banner'; diff --git a/plugins/woocommerce-admin/client/marketing/components/CollapsibleCard/CollapsibleCard.tsx b/plugins/woocommerce-admin/client/marketing/components/CollapsibleCard/CollapsibleCard.tsx index c7044810222..d6f811b5796 100644 --- a/plugins/woocommerce-admin/client/marketing/components/CollapsibleCard/CollapsibleCard.tsx +++ b/plugins/woocommerce-admin/client/marketing/components/CollapsibleCard/CollapsibleCard.tsx @@ -64,7 +64,7 @@ const CollapsibleCard: React.FC< CollapsibleCardProps > = ( { { ! collapsed && ( <> { children } - { footer && { footer } } + { !! footer && { footer } } ) } diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.scss b/plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.scss similarity index 100% rename from plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.scss rename to plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.scss diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.test.tsx b/plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.test.tsx similarity index 100% rename from plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.test.tsx rename to plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.test.tsx diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.tsx b/plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.tsx similarity index 98% rename from plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.tsx rename to plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.tsx index 3d67dd541cb..8bfcac186ef 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/CreateNewCampaignModal/CreateNewCampaignModal.tsx +++ b/plugins/woocommerce-admin/client/marketing/components/CreateNewCampaignModal/CreateNewCampaignModal.tsx @@ -105,7 +105,7 @@ export const CreateNewCampaignModal = ( props: CreateCampaignModalProps ) => { { __( 'Create', 'woocommerce' ) } - { isExternalURL( el.createUrl ) && ( + { !! isExternalURL( el.createUrl ) && ( - { post.image && ( + { !! post.image && (
@@ -89,7 +89,7 @@ const KnowledgeBase = ( {

{ __( 'By', 'woocommerce' ) + ' ' } { post.author_name } - { post.author_avatar && ( + { !! post.author_avatar && ( { return (

- { shouldShowExtensions && ( + { !! shouldShowExtensions && ( { +export const useCampaigns = ( page = 1, perPage = 5 ): UseCampaignsType => { const { data: channels } = useRegisteredChannels(); return useSelect( diff --git a/plugins/woocommerce-admin/client/marketing/hooks/useIntroductionBanner.ts b/plugins/woocommerce-admin/client/marketing/hooks/useIntroductionBanner.ts new file mode 100644 index 00000000000..0eebcb471a1 --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/hooks/useIntroductionBanner.ts @@ -0,0 +1,45 @@ +/** + * External dependencies + */ +import { useDispatch, useSelect } from '@wordpress/data'; +import { OPTIONS_STORE_NAME } from '@woocommerce/data'; +import { recordEvent } from '@woocommerce/tracks'; + +type UseIntroductionBanner = { + loading: boolean; + isIntroductionBannerDismissed: boolean; + dismissIntroductionBanner: () => void; +}; + +const OPTION_NAME_BANNER_DISMISSED = + 'woocommerce_marketing_overview_multichannel_banner_dismissed'; +const OPTION_VALUE_YES = 'yes'; + +export const useIntroductionBanner = (): UseIntroductionBanner => { + const { updateOptions } = useDispatch( OPTIONS_STORE_NAME ); + + const dismissIntroductionBanner = () => { + updateOptions( { + [ OPTION_NAME_BANNER_DISMISSED ]: OPTION_VALUE_YES, + } ); + recordEvent( 'marketing_multichannel_banner_dismissed', {} ); + }; + + const { loading, data } = useSelect( ( select ) => { + const { getOption, hasFinishedResolution } = + select( OPTIONS_STORE_NAME ); + + return { + loading: ! hasFinishedResolution( 'getOption', [ + OPTION_NAME_BANNER_DISMISSED, + ] ), + data: getOption( OPTION_NAME_BANNER_DISMISSED ), + }; + }, [] ); + + return { + loading, + isIntroductionBannerDismissed: data === OPTION_VALUE_YES, + dismissIntroductionBanner, + }; +}; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.test.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.test.tsx index 66513850819..aaa59396728 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.test.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.test.tsx @@ -7,21 +7,23 @@ import userEvent from '@testing-library/user-event'; /** * Internal dependencies */ -import { useCampaigns } from './useCampaigns'; -import { useCampaignTypes } from '~/marketing/hooks'; +import { useCampaignTypes, useCampaigns } from '~/marketing/hooks'; import { Campaigns } from './Campaigns'; -jest.mock( './useCampaigns', () => ( { - useCampaigns: jest.fn(), -} ) ); - jest.mock( '~/marketing/hooks', () => ( { + useCampaigns: jest.fn(), useCampaignTypes: jest.fn(), } ) ); -jest.mock( './CreateNewCampaignModal', () => ( { - CreateNewCampaignModal: () =>
Mocked CreateNewCampaignModal
, -} ) ); +jest.mock( '~/marketing/components', () => { + const originalModule = jest.requireActual( '~/marketing/components' ); + + return { + __esModule: true, + ...originalModule, + CreateNewCampaignModal: () =>
Mocked CreateNewCampaignModal
, + }; +} ); /** * Create a test campaign data object. diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.tsx index 367500c12a9..d3fdcf71bca 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Campaigns/Campaigns.tsx @@ -24,9 +24,11 @@ import { /** * Internal dependencies */ -import { CardHeaderTitle } from '~/marketing/components'; -import { useCampaigns } from './useCampaigns'; -import { CreateNewCampaignModal } from './CreateNewCampaignModal'; +import { + CardHeaderTitle, + CreateNewCampaignModal, +} from '~/marketing/components'; +import { useCampaigns } from '~/marketing/hooks'; import './Campaigns.scss'; const tableCaption = __( 'Campaigns', 'woocommerce' ); @@ -139,7 +141,7 @@ export const Campaigns = () => { { el.title } - { el.description && ( + { !! el.description && ( { el.description } @@ -168,14 +170,14 @@ export const Campaigns = () => { > { __( 'Create new campaign', 'woocommerce' ) } - { isModalOpen && ( + { !! isModalOpen && ( setModalOpen( false ) } /> ) } { getContent() } - { total && total > perPage && ( + { !! ( total && total > perPage ) && ( void; }; -export const Channels: React.FC< ChannelsProps > = ( { - registeredChannels, - recommendedChannels, - onInstalledAndActivated, -} ) => { - const hasRegisteredChannels = registeredChannels.length >= 1; - +export type ChannelsRef = { /** - * State to collapse / expand the recommended channels. - * Initial state is expanded if there are no registered channels in first page load. + * Scroll into the "Add channels" section in the card. + * The section will be expanded, and the "Add channels" button will be in focus. */ - const [ expanded, setExpanded ] = useState( ! hasRegisteredChannels ); + scrollIntoAddChannels: () => void; +}; - return ( - - - - { __( 'Channels', 'woocommerce' ) } - - { ! hasRegisteredChannels && ( - - { __( - 'Start by adding a channel to your store', - 'woocommerce' - ) } - - ) } - +export const Channels = forwardRef< ChannelsRef, ChannelsProps >( + ( + { registeredChannels, recommendedChannels, onInstalledAndActivated }, + ref + ) => { + const hasRegisteredChannels = registeredChannels.length >= 1; - { /* Registered channels section. */ } - { registeredChannels.map( ( el, idx ) => { - return ( + /** + * State to collapse / expand the recommended channels. + * Initial state is expanded if there are no registered channels in first page load. + */ + const [ expanded, setExpanded ] = useState( ! hasRegisteredChannels ); + const addChannelsButtonRef = useRef< HTMLButtonElement >( null ); + + useImperativeHandle( + ref, + () => ( { + scrollIntoAddChannels: () => { + setExpanded( true ); + addChannelsButtonRef.current?.focus(); + addChannelsButtonRef.current?.scrollIntoView( { + block: 'center', + } ); + }, + } ), + [] + ); + + return ( + + + + { __( 'Channels', 'woocommerce' ) } + + { ! hasRegisteredChannels && ( + + { __( + 'Start by adding a channel to your store', + 'woocommerce' + ) } + + ) } + + + { /* Registered channels section. */ } + { registeredChannels.map( ( el, idx ) => ( { idx !== registeredChannels.length - 1 && ( ) } - ); - } ) } + ) ) } - { /* Recommended channels section. */ } - { recommendedChannels.length >= 1 && ( -
- { hasRegisteredChannels && ( - <> - - - - - - ) } - { expanded && - recommendedChannels.map( ( el, idx ) => { - return ( + > + { __( 'Add channels', 'woocommerce' ) } + + + + + ) } + { !! expanded && + recommendedChannels.map( ( el, idx ) => ( = ( { ) } - ); - } ) } -
- ) } -
- ); -}; + ) ) } +
+ ) } + + ); + } +); diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/RegisteredChannelCardBody.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/RegisteredChannelCardBody.tsx index 2d4d9c007fa..ff80123cfc4 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/RegisteredChannelCardBody.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/RegisteredChannelCardBody.tsx @@ -31,7 +31,7 @@ export const RegisteredChannelCardBody: React.FC< registeredChannel.description ) : (
- { registeredChannel.syncStatus && ( + { !! registeredChannel.syncStatus && ( <>
diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/index.ts b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/index.ts index da0d9c56072..f0e4fcc3762 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/index.ts +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/Channels/index.ts @@ -1 +1,2 @@ export { Channels } from './Channels'; +export type { ChannelsRef } from './Channels'; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/IntroductionBanner.scss b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/IntroductionBanner.scss new file mode 100644 index 00000000000..99ac6dc8ad4 --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/IntroductionBanner.scss @@ -0,0 +1,54 @@ +.woocommerce-marketing-introduction-banner { + & > div { + display: flex; + flex-wrap: wrap; + } + + .woocommerce-marketing-introduction-banner-content { + flex: 1 0; + margin: 32px 20px 32px 40px; + + .woocommerce-marketing-introduction-banner-title { + font-size: 20px; + line-height: 28px; + margin-bottom: $gap-smaller; + } + + .woocommerce-marketing-introduction-banner-features { + color: $gray-700; + + svg { + fill: $studio-woocommerce-purple-50; + } + } + + .woocommerce-marketing-introduction-banner-buttons { + margin-top: $gap; + } + } + + .woocommerce-marketing-introduction-banner-illustration { + flex: 0 0 270px; + background: linear-gradient(90deg, rgba(247, 237, 247, 0) 5.31%, rgba(196, 152, 217, 0.12) 77.75%), + linear-gradient(90deg, rgba(247, 237, 247, 0) 22%, rgba(196, 152, 217, 0.12) 84.6%); + + .woocommerce-marketing-introduction-banner-image-placeholder { + width: 100%; + height: 100%; + background: center / contain no-repeat; + } + + .woocommerce-marketing-introduction-banner-close-button { + position: absolute; + top: $gap-small; + right: $gap; + padding: 0; + } + + img { + display: block; + width: 100%; + height: 100%; + } + } +} diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/IntroductionBanner.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/IntroductionBanner.tsx new file mode 100644 index 00000000000..829152f03dd --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/IntroductionBanner.tsx @@ -0,0 +1,152 @@ +/** + * External dependencies + */ +import { __ } from '@wordpress/i18n'; +import { useState } from '@wordpress/element'; +import { Card, Flex, FlexItem, FlexBlock, Button } from '@wordpress/components'; +import { Icon, trendingUp, megaphone, closeSmall } from '@wordpress/icons'; + +/** + * Internal dependencies + */ +import { CreateNewCampaignModal } from '~/marketing/components'; +import { + useRegisteredChannels, + useRecommendedChannels, +} from '~/marketing/hooks'; +import './IntroductionBanner.scss'; +import wooIconUrl from './woo.svg'; +import illustrationUrl from './illustration.svg'; + +type IntroductionBannerProps = { + onDismissClick: () => void; + onAddChannelsClick: () => void; +}; + +export const IntroductionBanner = ( { + onDismissClick, + onAddChannelsClick, +}: IntroductionBannerProps ) => { + const [ isModalOpen, setModalOpen ] = useState( false ); + const { data: dataRegistered } = useRegisteredChannels(); + const { data: dataRecommended } = useRecommendedChannels(); + + const showCreateCampaignButton = !! dataRegistered?.length; + + /** + * Boolean to display the "Add channels" button in the introduction banner. + * + * This depends on the number of registered channels, + * because if there are no registered channels, + * the Channels card will not have the "Add channels" toggle button, + * and it does not make sense to display the "Add channels" button in this introduction banner + * that will do nothing upon click. + * + * If there are registered channels and recommended channels, + * the Channels card will display the "Add channels" toggle button, + * and clicking on the "Add channels" button in this introduction banner + * will scroll to the button in Channels card. + */ + const showAddChannelsButton = + !! dataRegistered?.length && !! dataRecommended?.length; + + return ( + +
+
+ { __( + 'Reach new customers and increase sales without leaving WooCommerce', + 'woocommerce' + ) } +
+ + + + + + { __( + 'Reach customers on other sales channels', + 'woocommerce' + ) } + + + + + + + + { __( + 'Advertise with marketing campaigns', + 'woocommerce' + ) } + + + + + + { + + { __( 'Built by WooCommerce', 'woocommerce' ) } + + + + + { ( showCreateCampaignButton || showAddChannelsButton ) && ( + + { showCreateCampaignButton && ( + + ) } + { showAddChannelsButton && ( + + ) } + + ) } + { isModalOpen && ( + setModalOpen( false ) } + /> + ) } +
+
+ +
+
+ + ); +}; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/illustration.svg b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/illustration.svg new file mode 100644 index 00000000000..3a00d63416c --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/illustration.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/index.ts b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/index.ts new file mode 100644 index 00000000000..8ae35a6ca33 --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/index.ts @@ -0,0 +1 @@ +export { IntroductionBanner } from './IntroductionBanner'; diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/woo.svg b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/woo.svg new file mode 100644 index 00000000000..fb4a4205043 --- /dev/null +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/IntroductionBanner/woo.svg @@ -0,0 +1,15 @@ + + +WooCommerce Logo + + + +image/svg+xml + + + + + + + + diff --git a/plugins/woocommerce-admin/client/marketing/overview-multichannel/LearnMarketing/PostTile.tsx b/plugins/woocommerce-admin/client/marketing/overview-multichannel/LearnMarketing/PostTile.tsx index c5404557db5..7dc38070cd3 100644 --- a/plugins/woocommerce-admin/client/marketing/overview-multichannel/LearnMarketing/PostTile.tsx +++ b/plugins/woocommerce-admin/client/marketing/overview-multichannel/LearnMarketing/PostTile.tsx @@ -27,7 +27,7 @@ export const PostTile: React.FC< PostTileProps > = ( { post } ) => { } } >
- { post.image && } + { !! post.image && }
{ post.title } @@ -37,7 +37,7 @@ export const PostTile: React.FC< PostTileProps > = ( { post } ) => { // translators: %s: author's name. sprintf( __( 'By %s', 'woocommerce' ), post.author_name ) } - { post.author_avatar && ( + { !! post.author_avatar && ( { + const { + loading: loadingIntroductionBanner, + isIntroductionBannerDismissed, + dismissIntroductionBanner, + } = useIntroductionBanner(); + const { loading: loadingCampaigns, meta: metaCampaigns } = useCampaigns(); const { loading: loadingCampaignTypes, data: dataCampaignTypes, @@ -36,8 +46,11 @@ export const MarketingOverviewMultichannel: React.FC = () => { const { loading: loadingRecommended, data: dataRecommended } = useRecommendedChannels(); const { currentUserCan } = useUser(); + const channelsRef = useRef< ChannelsRef >( null ); if ( + loadingIntroductionBanner || + ( loadingCampaigns && metaCampaigns?.total === undefined ) || ( loadingCampaignTypes && ! dataCampaignTypes ) || ( loadingRegistered && ! dataRegistered ) || ( loadingRecommended && ! dataRecommended ) @@ -45,6 +58,11 @@ export const MarketingOverviewMultichannel: React.FC = () => { return ; } + const shouldShowCampaigns = !! ( + dataRegistered?.length && + ( isIntroductionBannerDismissed || metaCampaigns?.total ) + ); + const shouldShowExtensions = getAdminSetting( 'allowMarketplaceSuggestions', false ) && currentUserCan( 'install_plugins' ); @@ -56,18 +74,26 @@ export const MarketingOverviewMultichannel: React.FC = () => { return (
- { !! dataRegistered?.length && } - { dataRegistered && - dataRecommended && + { ! isIntroductionBannerDismissed && ( + { + channelsRef.current?.scrollIntoAddChannels(); + } } + /> + ) } + { shouldShowCampaigns && } + { !! ( dataRegistered && dataRecommended ) && !! ( dataRegistered.length || dataRecommended.length ) && ( ) } - { shouldShowExtensions && } + { !! shouldShowExtensions && }
); diff --git a/plugins/woocommerce-admin/client/marketing/overview/index.js b/plugins/woocommerce-admin/client/marketing/overview/index.js index 966254141ed..6a69a18cb3c 100644 --- a/plugins/woocommerce-admin/client/marketing/overview/index.js +++ b/plugins/woocommerce-admin/client/marketing/overview/index.js @@ -27,7 +27,7 @@ const MarketingOverview = () => { - { shouldShowExtensions && ( + { !! shouldShowExtensions && ( ) } diff --git a/plugins/woocommerce-admin/client/payments/payment-recommendations.tsx b/plugins/woocommerce-admin/client/payments/payment-recommendations.tsx index babef4e8679..1425d26fab0 100644 --- a/plugins/woocommerce-admin/client/payments/payment-recommendations.tsx +++ b/plugins/woocommerce-admin/client/payments/payment-recommendations.tsx @@ -193,7 +193,14 @@ const PaymentRecommendations: React.FC = () => { ), before: ( - + ), }; } ); diff --git a/plugins/woocommerce-admin/client/products/hooks/use-product-entity-record.ts b/plugins/woocommerce-admin/client/products/hooks/use-product-entity-record.ts new file mode 100644 index 00000000000..b0f03086810 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/hooks/use-product-entity-record.ts @@ -0,0 +1,42 @@ +/** + * External dependencies + */ +import { AUTO_DRAFT_NAME } from '@woocommerce/product-editor'; +import { Product } from '@woocommerce/data'; +import { useDispatch, resolveSelect } from '@wordpress/data'; + +import { useEffect, useState } from '@wordpress/element'; + +export function useProductEntityRecord( + productId: string | undefined +): Product | undefined { + const { saveEntityRecord } = useDispatch( 'core' ); + const [ product, setProduct ] = useState< Product | undefined >( + undefined + ); + + useEffect( () => { + const getRecordPromise: Promise< Product > = productId + ? resolveSelect( 'core' ).getEntityRecord< Product >( + 'postType', + 'product', + Number.parseInt( productId, 10 ) + ) + : // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Incorrect types. + ( saveEntityRecord( 'postType', 'product', { + title: AUTO_DRAFT_NAME, + status: 'auto-draft', + } ) as Promise< Product > ); + getRecordPromise + .then( ( autoDraftProduct: Product ) => { + setProduct( autoDraftProduct ); + } ) + .catch( ( e ) => { + setProduct( undefined ); + throw e; + } ); + }, [ productId ] ); + + return product; +} diff --git a/plugins/woocommerce-admin/client/products/product-block-page.scss b/plugins/woocommerce-admin/client/products/product-block-page.scss new file mode 100644 index 00000000000..f24be5be5e1 --- /dev/null +++ b/plugins/woocommerce-admin/client/products/product-block-page.scss @@ -0,0 +1,66 @@ +.woocommerce-product-block-editor { + .components-input-control { + &__prefix { + margin-left: $gap-smaller; + } + + &__suffix { + margin-right: $gap-smaller; + } + } + + .components-currency-control { + .components-input-control__prefix { + color: $gray-700; + } + + .components-input-control__input { + text-align: right; + } + } + + .components-summary-control { + width: 100%; + min-height: calc($gap-larger * 3); + background-color: $white; + box-sizing: border-box; + border: 1px solid #757575; + border-radius: 2px; + padding: $gap-smaller; + margin: 0; + appearance: textarea; + resize: vertical; + overflow: hidden; + + &:focus { + box-shadow: inset 0 0 0 1px var(--wp-admin-theme-color-darker-10, --wp-admin-theme-color); + border-color: var(--wp-admin-theme-color-darker-10, --wp-admin-theme-color); + } + } + + .woocommerce-product-form { + &__custom-label-input { + display: flex; + flex-direction: column; + + label { + display: block; + margin-bottom: $gap-smaller; + } + } + + &__optional-input { + color: $gray-700; + } + } + + .wp-block-columns { + gap: $gap-large; + } + + .wp-block-woocommerce-product-section { + > .block-editor-inner-blocks > .block-editor-block-list__layout > .wp-block:not(:first-child) { + margin-top: $gap-large; + } + } +} diff --git a/plugins/woocommerce-admin/client/products/product-form-actions.tsx b/plugins/woocommerce-admin/client/products/product-form-actions.tsx index 44c8038762d..bdee46d987c 100644 --- a/plugins/woocommerce-admin/client/products/product-form-actions.tsx +++ b/plugins/woocommerce-admin/client/products/product-form-actions.tsx @@ -20,7 +20,7 @@ import { } from '@woocommerce/product-editor'; import { Product } from '@woocommerce/data'; import { recordEvent } from '@woocommerce/tracks'; -import { navigateTo } from '@woocommerce/navigation'; +import { navigateTo, useConfirmUnsavedChanges } from '@woocommerce/navigation'; import { useSelect } from '@wordpress/data'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore No types for this exist yet. @@ -30,7 +30,6 @@ import { store } from '@wordpress/viewport'; /** * Internal dependencies */ -import usePreventLeavingPage from '~/hooks/usePreventLeavingPage'; import './product-form-actions.scss'; import { useProductMVPCESFooter } from '~/customer-effort-score-tracks/use-product-mvp-ces-footer'; @@ -50,7 +49,7 @@ export const ProductFormActions: React.FC = () => { const { isDirty, isValidForm, values, resetForm } = useFormContext< Product >(); - usePreventLeavingPage( isDirty, preventLeavingProductForm ); + useConfirmUnsavedChanges( isDirty, preventLeavingProductForm ); useCustomerEffortScoreExitPageTracker( ! values.id ? 'new_product' : 'editing_new_product', diff --git a/plugins/woocommerce-admin/client/products/product-more-menu.tsx b/plugins/woocommerce-admin/client/products/product-more-menu.tsx index 038239d58f7..a5e38a85718 100644 --- a/plugins/woocommerce-admin/client/products/product-more-menu.tsx +++ b/plugins/woocommerce-admin/client/products/product-more-menu.tsx @@ -9,14 +9,16 @@ import { getAdminLink } from '@woocommerce/settings'; import { moreVertical } from '@wordpress/icons'; import { OPTIONS_STORE_NAME, Product } from '@woocommerce/data'; import { useFormContext } from '@woocommerce/components'; -import { ALLOW_TRACKING_OPTION_NAME } from '@woocommerce/customer-effort-score'; +import { + ALLOW_TRACKING_OPTION_NAME, + STORE_KEY as CES_STORE_KEY, +} from '@woocommerce/customer-effort-score'; /** * Internal dependencies */ import { ClassicEditorIcon } from './images/classic-editor-icon'; import { FeedbackIcon } from './images/feedback-icon'; -import { STORE_KEY as CES_STORE_KEY } from '~/customer-effort-score-tracks/data/constants'; import { NEW_PRODUCT_MANAGEMENT } from '~/customer-effort-score-tracks/product-mvp-ces-footer'; import './product-more-menu.scss'; diff --git a/plugins/woocommerce-admin/client/products/product-page.tsx b/plugins/woocommerce-admin/client/products/product-page.tsx index 5f3eb9873c8..ed004455594 100644 --- a/plugins/woocommerce-admin/client/products/product-page.tsx +++ b/plugins/woocommerce-admin/client/products/product-page.tsx @@ -3,25 +3,27 @@ */ import { __experimentalEditor as Editor, - AUTO_DRAFT_NAME, ProductEditorSettings, } from '@woocommerce/product-editor'; -import { Product } from '@woocommerce/data'; -import { useDispatch, useSelect, select as WPSelect } from '@wordpress/data'; -import { useEffect, useState } from '@wordpress/element'; + import { Spinner } from '@wordpress/components'; import { useParams } from 'react-router-dom'; /** * Internal dependencies */ +import { useProductEntityRecord } from './hooks/use-product-entity-record'; + import './product-page.scss'; +import './product-block-page.scss'; declare const productBlockEditorSettings: ProductEditorSettings; -const ProductEditor: React.FC< { product: Product | undefined } > = ( { - product, -} ) => { +export default function ProductPage() { + const { productId } = useParams(); + + const product = useProductEntityRecord( productId ); + if ( ! product?.id ) { return ; } @@ -32,50 +34,4 @@ const ProductEditor: React.FC< { product: Product | undefined } > = ( { settings={ productBlockEditorSettings || {} } /> ); -}; - -const EditProductEditor: React.FC< { productId: string } > = ( { - productId, -} ) => { - const { product } = useSelect( ( select: typeof WPSelect ) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore Missing types. - const { getEditedEntityRecord } = select( 'core' ); - - return { - product: getEditedEntityRecord( 'postType', 'product', productId ), - }; - } ); - - return ; -}; - -const AddProductEditor = () => { - const { saveEntityRecord } = useDispatch( 'core' ); - const [ product, setProduct ] = useState< Product | undefined >( - undefined - ); - - useEffect( () => { - saveEntityRecord( 'postType', 'product', { - title: AUTO_DRAFT_NAME, - status: 'auto-draft', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore Incorrect types. - } ).then( ( autoDraftProduct: Product ) => { - setProduct( autoDraftProduct ); - } ); - }, [] ); - - return ; -}; - -export default function ProductPage() { - const { productId } = useParams(); - - if ( productId ) { - return ; - } - - return ; } diff --git a/plugins/woocommerce-admin/client/products/product-variation-form-actions.tsx b/plugins/woocommerce-admin/client/products/product-variation-form-actions.tsx index 280aeaaa369..7a4b258ba6a 100644 --- a/plugins/woocommerce-admin/client/products/product-variation-form-actions.tsx +++ b/plugins/woocommerce-admin/client/products/product-variation-form-actions.tsx @@ -11,6 +11,7 @@ import { import { preventLeavingProductForm } from '@woocommerce/product-editor'; import { registerPlugin } from '@wordpress/plugins'; import { useDispatch } from '@wordpress/data'; +import { useConfirmUnsavedChanges } from '@woocommerce/navigation'; import { useFormContext } from '@woocommerce/components'; import { useParams } from 'react-router-dom'; import { useState } from '@wordpress/element'; @@ -18,7 +19,6 @@ import { useState } from '@wordpress/element'; /** * Internal dependencies */ -import usePreventLeavingPage from '~/hooks/usePreventLeavingPage'; import './product-form-actions.scss'; export const ProductVariationFormActions: React.FC = () => { @@ -31,7 +31,7 @@ export const ProductVariationFormActions: React.FC = () => { const { createNotice } = useDispatch( 'core/notices' ); const [ isSaving, setIsSaving ] = useState( false ); - usePreventLeavingPage( isDirty, preventLeavingProductForm ); + useConfirmUnsavedChanges( isDirty, preventLeavingProductForm ); const onSave = async () => { setIsSaving( true ); diff --git a/plugins/woocommerce-admin/client/products/test/product-form-actions.spec.tsx b/plugins/woocommerce-admin/client/products/test/product-form-actions.spec.tsx index 945e28e8b4e..683ab12e273 100644 --- a/plugins/woocommerce-admin/client/products/test/product-form-actions.spec.tsx +++ b/plugins/woocommerce-admin/client/products/test/product-form-actions.spec.tsx @@ -53,7 +53,10 @@ jest.mock( '@woocommerce/product-editor', () => { } ), }; } ); -jest.mock( '~/hooks/usePreventLeavingPage' ); +jest.mock( '@woocommerce/navigation', () => ( { + ...jest.requireActual( '@woocommerce/navigation' ), + useConfirmUnsavedChanges: jest.fn(), +} ) ); jest.mock( '@woocommerce/customer-effort-score', () => ( { useCustomerEffortScoreExitPageTracker: jest.fn(), } ) ); diff --git a/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/components/List/Item.js b/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/components/List/Item.js index 80bdede39d2..25ceb1c4557 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/components/List/Item.js +++ b/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/components/List/Item.js @@ -31,6 +31,7 @@ export const Item = ( { isRecommended, markConfigured, paymentGateway } ) => { settingsUrl: manageUrl, is_local_partner: isLocalPartner, external_link: externalLink, + transaction_processors: transactionProcessors, } = paymentGateway; const connectSlot = useSlot( @@ -88,6 +89,21 @@ export const Item = ( { isRecommended, markConfigured, paymentGateway } ) => {
{ content }
+ { transactionProcessors && ( +
+ { Object.keys( transactionProcessors ).map( + ( key ) => { + return ( + { + ); + } + ) } +
+ ) }
{ recordEvent( 'tasklist_payment_see_more', {} ); }; - const trackToggle = ( isShow ) => { - recordEvent( 'tasklist_payment_show_toggle', { - toggle: isShow ? 'hide' : 'show', - payment_method_count: - offlineGateways.length + additionalGateways.length, - } ); - }; - if ( query.id && ! currentGateway ) { return ; } @@ -270,16 +261,8 @@ export const PaymentGatewaySuggestions = ( { onComplete, query } ) => { { wcPayGateway.length ? ( <> - - { additionalSection } - { offlineSection } - + { additionalSection } + { offlineSection } ) : ( <> diff --git a/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/test/index.js b/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/test/index.js index b56e28545ae..08de19aa480 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/test/index.js +++ b/plugins/woocommerce-admin/client/tasks/fills/PaymentGatewaySuggestions/test/index.js @@ -90,7 +90,7 @@ const paymentGatewaySuggestionsWithoutWCPay = paymentGatewaySuggestions.filter( ); describe( 'PaymentGatewaySuggestions', () => { - test( 'should render only WCPay if its suggested', () => { + test( 'should render all payment gateways, including WCPay', () => { const onComplete = jest.fn(); const query = {}; useSelect.mockImplementation( () => ( { @@ -115,7 +115,10 @@ describe( 'PaymentGatewaySuggestions', () => { ( e ) => e.textContent ); - expect( paymentTitles ).toEqual( [] ); + expect( paymentTitles ).toEqual( [ + 'Cash on delivery', + 'Direct bank transfer', + ] ); expect( container @@ -126,7 +129,7 @@ describe( 'PaymentGatewaySuggestions', () => { ).toBe( true ); } ); - test( 'should render all payment gateways if no WCPay', () => { + test( 'should render all payment gateways except WCPay', () => { const onComplete = jest.fn(); const query = {}; useSelect.mockImplementation( () => ( { @@ -299,39 +302,6 @@ describe( 'PaymentGatewaySuggestions', () => { } ); } ); - test( 'should record event correctly when Other payment providers is clicked', () => { - const onComplete = jest.fn(); - const query = {}; - useSelect.mockImplementation( () => ( { - isResolving: false, - getPaymentGateway: jest.fn(), - paymentGatewaySuggestions, - installedPaymentGateways: [], - countryCode: 'US', - } ) ); - - render( - - ); - - fireEvent.click( screen.getByText( 'Other payment providers' ) ); - - // By default it's hidden, so when toggle it shows. - // Second call after "tasklist_payments_options". - expect( - recordEvent.mock.calls[ recordEvent.mock.calls.length - 1 ] - ).toEqual( [ - 'tasklist_payment_show_toggle', - { - toggle: 'show', - payment_method_count: paymentGatewaySuggestions.length - 1, // Minus one for WCPay since it's not counted in "Other payment providers". - }, - ] ); - } ); - test( 'should record event correctly when see more is clicked', () => { const onComplete = jest.fn(); const query = {}; diff --git a/plugins/woocommerce-admin/client/tasks/fills/experimental-shipping-recommendation/components/plugin-banner.scss b/plugins/woocommerce-admin/client/tasks/fills/experimental-shipping-recommendation/components/plugin-banner.scss index aeb41e3fafe..64a78605fab 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/experimental-shipping-recommendation/components/plugin-banner.scss +++ b/plugins/woocommerce-admin/client/tasks/fills/experimental-shipping-recommendation/components/plugin-banner.scss @@ -1,5 +1,4 @@ .woocommerce-task-shipping-recommendation__plugins-install { - display: flex; padding: $gap-large calc($gap + $gap-smallest); border: 1px solid #ddd; border-radius: 3px; @@ -7,19 +6,20 @@ margin-bottom: $gap-large; &.dual { + display: flex; flex-direction: column; - justify-content: space-between; + justify-content: flex-start; width: 285px; - height: 322px; p { margin-top: 0; - margin-bottom: -$gap-smaller; + margin-bottom: 15px; color: $gray-700; } .plugins-install__plugin-banner-image { display: flex; + margin-bottom: $gap-large; img { width: 120px; height: 28px; @@ -28,8 +28,9 @@ } &.single { + display: flex; .plugins-install__list { - max-width: 380px; + max-width: 360px; } } @@ -51,6 +52,10 @@ .woocommerce-task-shipping-recommendations_plugins-buttons { display: flex; justify-content: space-between; + margin-top: $gap-large; + flex-grow: 1; + align-items: flex-end; + button { min-width: 40%; padding-inline: $gap-smaller; diff --git a/plugins/woocommerce-admin/client/tasks/fills/import-products/cards.scss b/plugins/woocommerce-admin/client/tasks/fills/import-products/cards.scss index 715d2bd6eaf..29e15f6cdb8 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/import-products/cards.scss +++ b/plugins/woocommerce-admin/client/tasks/fills/import-products/cards.scss @@ -8,7 +8,9 @@ grid-template-columns: auto auto; grid-column-gap: 16px; grid-row-gap: 24px; - justify-content: start; + // Set it to center here since we only have one import option. + // We can change it to start when we have more import options. + justify-content: center; } .woocommerce-list__item { diff --git a/plugins/woocommerce-admin/client/tasks/fills/import-products/importTypes.tsx b/plugins/woocommerce-admin/client/tasks/fills/import-products/importTypes.tsx index abb15efd783..dd8a3cd77b0 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/import-products/importTypes.tsx +++ b/plugins/woocommerce-admin/client/tasks/fills/import-products/importTypes.tsx @@ -3,10 +3,7 @@ */ import { __ } from '@wordpress/i18n'; import PageIcon from 'gridicons/dist/pages'; -import ReblogIcon from 'gridicons/dist/reblog'; import { getAdminLink } from '@woocommerce/settings'; -import interpolateComponents from '@automattic/interpolate-components'; -import { ExternalLink } from '@wordpress/components'; import { recordEvent } from '@woocommerce/tracks'; export const importTypes = [ @@ -25,32 +22,4 @@ export const importTypes = [ ); }, }, - { - key: 'from-cart2cart' as const, - title: __( 'FROM CART2CART', 'woocommerce' ), - content: interpolateComponents( { - mixedString: __( - 'Migrate all store data like products, customers, and orders in no time with this 3rd party plugin. {{link}}Learn more{{/link}}', - 'woocommerce' - ), - components: { - link: ( - e.preventDefault() } - > - ), - }, - } ), - before: , - onClick: () => { - recordEvent( 'tasklist_add_product', { method: 'migrate' } ); - window - .open( - 'https://woocommerce.com/products/cart2cart/?utm_medium=product', - '_blank' - ) - ?.focus(); - }, - }, ]; diff --git a/plugins/woocommerce-admin/client/tasks/fills/import-products/test/index.tsx b/plugins/woocommerce-admin/client/tasks/fills/import-products/test/index.tsx index 981543421f5..6bf835fea08 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/import-products/test/index.tsx +++ b/plugins/woocommerce-admin/client/tasks/fills/import-products/test/index.tsx @@ -57,24 +57,6 @@ describe( 'Products', () => { ); } ); - test( 'should fire "tasklist_add_product" event when the cart2cart option clicked', async () => { - const { getByRole } = render( ); - - userEvent.click( - getByRole( 'menuitem', { - name: 'FROM CART2CART Migrate all store data like products, customers, and orders in no time with this 3rd party plugin. Learn more (opens in a new tab)', - } ) - ); - await waitFor( () => - expect( recordEvent ).toHaveBeenCalledWith( - 'tasklist_add_product', - { - method: 'migrate', - } - ) - ); - } ); - test( 'should fire "task_completion_time" event when an option clicked', async () => { Object.defineProperty( window, 'performance', { value: { diff --git a/plugins/woocommerce-admin/client/tasks/fills/products/footer.tsx b/plugins/woocommerce-admin/client/tasks/fills/products/footer.tsx index 2538012b50b..86dba20973c 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/products/footer.tsx +++ b/plugins/woocommerce-admin/client/tasks/fills/products/footer.tsx @@ -4,7 +4,6 @@ import { __ } from '@wordpress/i18n'; import interpolateComponents from '@automattic/interpolate-components'; import { Text } from '@woocommerce/experimental'; -import { ExternalLink } from '@wordpress/components'; import { Link } from '@woocommerce/components'; import { getAdminLink } from '@woocommerce/settings'; import { recordEvent } from '@woocommerce/tracks'; @@ -25,7 +24,7 @@ const Footer: React.FC = () => { { interpolateComponents( { mixedString: __( - '{{importCSVLink}}Import your products from a CSV file{{/importCSVLink}} or {{_3rdLink}}use a 3rd party migration plugin{{/_3rdLink}}.', + '{{importCSVLink}}Import your products from a CSV file{{/importCSVLink}}.', 'woocommerce' ), components: { @@ -47,20 +46,6 @@ const Footer: React.FC = () => { <> ), - _3rdLink: ( - { - recordEvent( 'tasklist_add_product', { - method: 'migrate', - } ); - recordCompletionTime(); - } } - href="https://woocommerce.com/products/cart2cart/?utm_medium=product" - type="external" - > - <> - - ), }, } ) } diff --git a/plugins/woocommerce-admin/client/tasks/fills/products/test/footer.tsx b/plugins/woocommerce-admin/client/tasks/fills/products/test/footer.tsx index f042aa61be2..b75e20d3107 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/products/test/footer.tsx +++ b/plugins/woocommerce-admin/client/tasks/fills/products/test/footer.tsx @@ -16,9 +16,9 @@ describe( 'Footer', () => { beforeEach( () => { ( recordEvent as jest.Mock ).mockClear(); } ); - it( 'should render footer with two links', () => { + it( 'should render footer with one links', () => { const { queryAllByRole } = render(
); - expect( queryAllByRole( 'link' ) ).toHaveLength( 2 ); + expect( queryAllByRole( 'link' ) ).toHaveLength( 1 ); } ); it( 'clicking on import CSV should fire event tasklist_add_product with method:import and task_completion_time', () => { @@ -35,19 +35,4 @@ describe( 'Footer', () => { { task_name: 'products', time: '0-2s' } ); } ); - - it( 'clicking on start blank should fire event tasklist_add_product with method:migrate and task_completion_time', () => { - const { getByText } = render(
); - userEvent.click( getByText( 'use a 3rd party migration plugin' ) ); - expect( recordEvent ).toHaveBeenNthCalledWith( - 1, - 'tasklist_add_product', - { method: 'migrate' } - ); - expect( recordEvent ).toHaveBeenNthCalledWith( - 2, - 'task_completion_time', - { task_name: 'products', time: '0-2s' } - ); - } ); } ); diff --git a/plugins/woocommerce-admin/client/tasks/fills/shipping/shipping-providers/shipping-providers.ts b/plugins/woocommerce-admin/client/tasks/fills/shipping/shipping-providers/shipping-providers.ts index 58df653cdbf..10f703ac863 100644 --- a/plugins/woocommerce-admin/client/tasks/fills/shipping/shipping-providers/shipping-providers.ts +++ b/plugins/woocommerce-admin/client/tasks/fills/shipping/shipping-providers/shipping-providers.ts @@ -83,6 +83,7 @@ const providers = { }, Skydropx: { name: 'Skydropx' as const, + slug: 'skydropx-cotizador-y-envios', // https://wordpress.org/plugins/skydropx-cotizador-y-envios/ url: 'https://wordpress.org/plugins/skydropx-cotizador-y-envios/', 'single-partner-layout': SkydropxSinglePartner, }, diff --git a/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx b/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx index 91e7623b723..a3e94b33d2c 100644 --- a/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx +++ b/plugins/woocommerce-admin/client/two-column-tasks/completed-header.tsx @@ -10,8 +10,11 @@ import { OPTIONS_STORE_NAME, WCDataSelector, WEEK } from '@woocommerce/data'; import { Button, Card, CardHeader } from '@wordpress/components'; import { Text } from '@woocommerce/experimental'; import { + ADMIN_INSTALL_TIMESTAMP_OPTION_NAME, + ALLOW_TRACKING_OPTION_NAME, CustomerFeedbackModal, CustomerFeedbackSimple, + SHOWN_FOR_ACTIONS_OPTION_NAME, } from '@woocommerce/customer-effort-score'; import { __ } from '@wordpress/i18n'; @@ -27,11 +30,7 @@ type TaskListCompletedHeaderProps = { customerEffortScore: boolean; }; -const ADMIN_INSTALL_TIMESTAMP_OPTION_NAME = - 'woocommerce_admin_install_timestamp'; -const SHOWN_FOR_ACTIONS_OPTION_NAME = 'woocommerce_ces_shown_for_actions'; const CUSTOMER_EFFORT_SCORE_ACTION = 'store_setup'; -const ALLOW_TRACKING_OPTION_NAME = 'woocommerce_allow_tracking'; function getStoreAgeInWeeks( adminInstallTimestamp: number ) { if ( adminInstallTimestamp === 0 ) { diff --git a/plugins/woocommerce-admin/package.json b/plugins/woocommerce-admin/package.json index 01aa5cbe395..8a500e53f63 100644 --- a/plugins/woocommerce-admin/package.json +++ b/plugins/woocommerce-admin/package.json @@ -33,9 +33,12 @@ "lint:js-pre-commit": "eslint --ext=js,ts,tsx", "prepack": "pnpm install && pnpm run lint && pnpm run test && cross-env WC_ADMIN_PHASE=core pnpm run build", "packages:fix:textdomain": "node ./bin/package-update-textdomain.js", - "packages:watch": "cross-env WC_ADMIN_PHASE=development pnpm run:packages -- start --parallel", - "run:packages": "pnpm run --filter ../../packages/js/", - "start": "cross-env WC_ADMIN_PHASE=development pnpm -w run build --filter='./packages/js/*' && cross-env WC_ADMIN_PHASE=development pnpm run build:feature-config && concurrently \"cross-env WC_ADMIN_PHASE=development webpack --watch\" \"cross-env WC_ADMIN_PHASE=development pnpm packages:watch\"", + "packages:build": "pnpm run:packages -- build", + "packages:watch": "pnpm run:packages -- start", + "run:packages": "pnpm run --parallel --filter='../../packages/js/**'", + "prestart": "pnpm packages:build && cross-env WC_ADMIN_PHASE=development pnpm run build:feature-config", + "start": "concurrently \"cross-env WC_ADMIN_PHASE=development webpack --watch\" \"cross-env WC_ADMIN_PHASE=development pnpm packages:watch\"", + "start:hot": "pnpm prestart && concurrently \"cross-env HOT=true WC_ADMIN_PHASE=development webpack serve\" \"cross-env WC_ADMIN_PHASE=development pnpm packages:watch\"", "test-staged": "pnpm run test:client --bail --findRelatedTests", "test:client": "jest --config client/jest.config.js", "test:debug": "node --inspect-brk ./node_modules/.bin/jest --config client/jest.config.js --watch --runInBand --no-cache", @@ -109,6 +112,7 @@ "@babel/preset-typescript": "^7.16.7", "@babel/runtime": "^7.17.2", "@octokit/core": "^3.5.1", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@testing-library/dom": "^8.11.3", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.3", @@ -203,6 +207,7 @@ "prop-types": "^15.8.1", "puppeteer": "^2.0.0", "raw-loader": "^4.0.2", + "react-refresh": "^0.14.0", "readline-sync": "^1.4.10", "replace": "^1.2.1", "rimraf": "^3.0.2", @@ -217,6 +222,7 @@ "webpack": "^5.70.0", "webpack-bundle-analyzer": "^3.9.0", "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.11.1", "webpack-fix-style-only-entries": "^0.6.1", "webpack-merge": "^5.8.0", "webpack-rtl-plugin": "^2.0.0" diff --git a/plugins/woocommerce-admin/webpack.config.js b/plugins/woocommerce-admin/webpack.config.js index 47642993727..54a6afebd25 100644 --- a/plugins/woocommerce-admin/webpack.config.js +++ b/plugins/woocommerce-admin/webpack.config.js @@ -9,6 +9,7 @@ const BundleAnalyzerPlugin = require( 'webpack-bundle-analyzer' ).BundleAnalyzerPlugin; const MomentTimezoneDataPlugin = require( 'moment-timezone-data-webpack-plugin' ); const ForkTsCheckerWebpackPlugin = require( 'fork-ts-checker-webpack-plugin' ); +const ReactRefreshWebpackPlugin = require( '@pmmmwh/react-refresh-webpack-plugin' ); /** * Internal dependencies @@ -21,6 +22,8 @@ const WooCommerceDependencyExtractionWebpackPlugin = require( '../../packages/js const NODE_ENV = process.env.NODE_ENV || 'development'; const WC_ADMIN_PHASE = process.env.WC_ADMIN_PHASE || 'development'; +const isHot = Boolean( process.env.HOT ); +const isProduction = NODE_ENV === 'production'; const wcAdminPackages = [ 'admin-layout', @@ -129,7 +132,12 @@ const webpackConfig = { ], [ '@babel/preset-typescript' ], ], - plugins: [ '@babel/plugin-proposal-class-properties' ], + plugins: [ + '@babel/plugin-proposal-class-properties', + ! isProduction && + isHot && + require.resolve( 'react-refresh/babel' ), + ].filter( Boolean ), }, }, }, @@ -183,6 +191,8 @@ const webpackConfig = { force: true, } ) ), } ), + // React Fast Refresh. + ! isProduction && isHot && new ReactRefreshWebpackPlugin(), // We reuse this Webpack setup for Storybook, where we need to disable dependency extraction. ! process.env.STORYBOOK && @@ -217,13 +227,29 @@ const webpackConfig = { }, }, }; +if ( ! isProduction || WC_ADMIN_PHASE === 'development' ) { + // Set default sourcemap mode if it wasn't set by WP_DEVTOOL. + webpackConfig.devtool = webpackConfig.devtool || 'source-map'; -// Use the source map if we're in development mode, . -if ( - webpackConfig.mode === 'development' || - WC_ADMIN_PHASE === 'development' -) { - webpackConfig.devtool = process.env.SOURCEMAP || 'source-map'; + if ( isHot ) { + // Add dev server config + // Copied from https://github.com/WordPress/gutenberg/blob/05bea6dd5c6198b0287c41a401d36a06b48831eb/packages/scripts/config/webpack.config.js#L312-L326 + webpackConfig.devServer = { + devMiddleware: { + writeToDisk: true, + }, + allowedHosts: 'auto', + host: 'localhost', + port: 8887, + proxy: { + '/build': { + pathRewrite: { + '^/build': '', + }, + }, + }, + }; + } } module.exports = webpackConfig; diff --git a/plugins/woocommerce/assets/images/shipping_partners/check.svg b/plugins/woocommerce/assets/images/shipping_partners/check.svg new file mode 100644 index 00000000000..2ddc7203902 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/discount.svg b/plugins/woocommerce/assets/images/shipping_partners/discount.svg new file mode 100644 index 00000000000..2855be644bd --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/discount.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/envia-column.svg b/plugins/woocommerce/assets/images/shipping_partners/envia-column.svg new file mode 100644 index 00000000000..ab9b864ed21 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/envia-column.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/packlink-column.svg b/plugins/woocommerce/assets/images/shipping_partners/packlink-column.svg new file mode 100644 index 00000000000..26e912a6c77 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/packlink-column.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/packlink-row.svg b/plugins/woocommerce/assets/images/shipping_partners/packlink-row.svg new file mode 100644 index 00000000000..31be20af962 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/packlink-row.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/sendcloud-column.svg b/plugins/woocommerce/assets/images/shipping_partners/sendcloud-column.svg new file mode 100644 index 00000000000..5eb02636c50 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/sendcloud-column.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/sendcloud-row.svg b/plugins/woocommerce/assets/images/shipping_partners/sendcloud-row.svg new file mode 100644 index 00000000000..7af5c26fe42 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/sendcloud-row.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/shipstation-column.svg b/plugins/woocommerce/assets/images/shipping_partners/shipstation-column.svg new file mode 100644 index 00000000000..7e4ce249077 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/shipstation-column.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/shipstation-row.svg b/plugins/woocommerce/assets/images/shipping_partners/shipstation-row.svg new file mode 100644 index 00000000000..965fcdb3e8f --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/shipstation-row.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/skydropx-column.svg b/plugins/woocommerce/assets/images/shipping_partners/skydropx-column.svg new file mode 100644 index 00000000000..bb7e0f47fdd --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/skydropx-column.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/star.svg b/plugins/woocommerce/assets/images/shipping_partners/star.svg new file mode 100644 index 00000000000..2283a6f2cb4 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/star.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/timer.svg b/plugins/woocommerce/assets/images/shipping_partners/timer.svg new file mode 100644 index 00000000000..afb0cdc184b --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/timer.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plugins/woocommerce/assets/images/shipping_partners/wcs-column.svg b/plugins/woocommerce/assets/images/shipping_partners/wcs-column.svg new file mode 100644 index 00000000000..57d2056c995 --- /dev/null +++ b/plugins/woocommerce/assets/images/shipping_partners/wcs-column.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/woocommerce/changelog/36257-redux b/plugins/woocommerce/changelog/36257-redux deleted file mode 100644 index 84a77791f36..00000000000 --- a/plugins/woocommerce/changelog/36257-redux +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Allow sorting by menu_order in products widget. diff --git a/plugins/woocommerce/changelog/add-35851-tree-control-selection b/plugins/woocommerce/changelog/add-35851-tree-control-selection deleted file mode 100644 index 8ec6ebea260..00000000000 --- a/plugins/woocommerce/changelog/add-35851-tree-control-selection +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix unit test snapshots due to a dependency version change diff --git a/plugins/woocommerce/changelog/add-36413-support-for-cart-checkout-in-declare-compatibility b/plugins/woocommerce/changelog/add-36413-support-for-cart-checkout-in-declare-compatibility deleted file mode 100644 index 7724faa14f5..00000000000 --- a/plugins/woocommerce/changelog/add-36413-support-for-cart-checkout-in-declare-compatibility +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: enhancement - -Add the support for the C&C Blocks in declaring compatibility feature diff --git a/plugins/woocommerce/changelog/add-36661_existing_attribute_layout b/plugins/woocommerce/changelog/add-36661_existing_attribute_layout deleted file mode 100644 index 7ea6d84a2e2..00000000000 --- a/plugins/woocommerce/changelog/add-36661_existing_attribute_layout +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Add existing global attribute layout #36944 diff --git a/plugins/woocommerce/changelog/add-36991 b/plugins/woocommerce/changelog/add-36991 deleted file mode 100644 index 710c3b98efc..00000000000 --- a/plugins/woocommerce/changelog/add-36991 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Create editor skeleton on add/edit product pages diff --git a/plugins/woocommerce/changelog/add-37096 b/plugins/woocommerce/changelog/add-37096 deleted file mode 100644 index 9644a87c81e..00000000000 --- a/plugins/woocommerce/changelog/add-37096 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Add tabs and sections placeholders in product blocks template diff --git a/plugins/woocommerce/changelog/add-37103 b/plugins/woocommerce/changelog/add-37103 new file mode 100644 index 00000000000..b555a67c8ae --- /dev/null +++ b/plugins/woocommerce/changelog/add-37103 @@ -0,0 +1,4 @@ +Significance: minor +Type: add + +Add summary block diff --git a/plugins/woocommerce/changelog/add-37120_hydrate_product_editor_settings b/plugins/woocommerce/changelog/add-37120_hydrate_product_editor_settings deleted file mode 100644 index 8bf592e2794..00000000000 --- a/plugins/woocommerce/changelog/add-37120_hydrate_product_editor_settings +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Add productBlockEditorSettings script to be used for the Product Block Editor. diff --git a/plugins/woocommerce/changelog/add-37128 b/plugins/woocommerce/changelog/add-37128 deleted file mode 100644 index ad668d22778..00000000000 --- a/plugins/woocommerce/changelog/add-37128 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Add new feature flag for the product edit blocks experience diff --git a/plugins/woocommerce/changelog/add-admin-layout-package b/plugins/woocommerce/changelog/add-admin-layout-package deleted file mode 100644 index ec1bd147634..00000000000 --- a/plugins/woocommerce/changelog/add-admin-layout-package +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Add @woocommerce/admin-layout package. diff --git a/plugins/woocommerce/changelog/add-encoding-selector-to-product-importer b/plugins/woocommerce/changelog/add-encoding-selector-to-product-importer deleted file mode 100644 index 7d2631b3da9..00000000000 --- a/plugins/woocommerce/changelog/add-encoding-selector-to-product-importer +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Add an encoding selector to the product importer diff --git a/plugins/woocommerce/changelog/add-initial-product-draft-37003 b/plugins/woocommerce/changelog/add-initial-product-draft-37003 deleted file mode 100644 index 5ac217f5914..00000000000 --- a/plugins/woocommerce/changelog/add-initial-product-draft-37003 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Creating product entity in auto-draft status, and adding support for retrieving preexisting products. diff --git a/plugins/woocommerce/changelog/add-k6-regression-test b/plugins/woocommerce/changelog/add-k6-regression-test deleted file mode 100644 index bec84721135..00000000000 --- a/plugins/woocommerce/changelog/add-k6-regression-test +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: add -Comment: Perf test not included in release - - diff --git a/plugins/woocommerce/changelog/add-marketing-trackers b/plugins/woocommerce/changelog/add-marketing-trackers deleted file mode 100644 index 44debd914aa..00000000000 --- a/plugins/woocommerce/changelog/add-marketing-trackers +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: add - -Add marketplace suggestions and multichannel marketing information to WC Tracker. diff --git a/plugins/woocommerce/changelog/add-name-block-37007 b/plugins/woocommerce/changelog/add-name-block-37007 deleted file mode 100644 index 8785c8ec87c..00000000000 --- a/plugins/woocommerce/changelog/add-name-block-37007 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Update template of product type to include product name block. diff --git a/plugins/woocommerce/changelog/add-order_cache b/plugins/woocommerce/changelog/add-order_cache deleted file mode 100644 index 1b800aff214..00000000000 --- a/plugins/woocommerce/changelog/add-order_cache +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Add a cache for orders, to use when custom order tables are enabled diff --git a/plugins/woocommerce/changelog/add-product-inventory-tracks b/plugins/woocommerce/changelog/add-product-inventory-tracks deleted file mode 100644 index 3b17caa8cdd..00000000000 --- a/plugins/woocommerce/changelog/add-product-inventory-tracks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: tweak - -Add Tracks events for product inventory tab interactions. diff --git a/plugins/woocommerce/changelog/add-tracking-for-loca-pickup b/plugins/woocommerce/changelog/add-tracking-for-loca-pickup deleted file mode 100644 index 20ccbdbeb1f..00000000000 --- a/plugins/woocommerce/changelog/add-tracking-for-loca-pickup +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: tweak - -Add tracking for local pickup method in Checkout diff --git a/plugins/woocommerce/changelog/add-turn-get-tax-location-public b/plugins/woocommerce/changelog/add-turn-get-tax-location-public deleted file mode 100644 index c15b487c25d..00000000000 --- a/plugins/woocommerce/changelog/add-turn-get-tax-location-public +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Make WC_Order::get_tax_location accessible publicly through a wrapper function. diff --git a/plugins/woocommerce/changelog/dev-37117_set_default_quantity_value b/plugins/woocommerce/changelog/dev-37117_set_default_quantity_value new file mode 100644 index 00000000000..131462c4f1d --- /dev/null +++ b/plugins/woocommerce/changelog/dev-37117_set_default_quantity_value @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Set quantity value when stock tracking is enabled diff --git a/plugins/woocommerce/changelog/dev-37119_show_message_for_variable_products b/plugins/woocommerce/changelog/dev-37119_show_message_for_variable_products deleted file mode 100644 index 859ac60349f..00000000000 --- a/plugins/woocommerce/changelog/dev-37119_show_message_for_variable_products +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Show a message for variable products diff --git a/plugins/woocommerce/changelog/dev-clean-analytics-classes b/plugins/woocommerce/changelog/dev-clean-analytics-classes deleted file mode 100644 index fdd8860a366..00000000000 --- a/plugins/woocommerce/changelog/dev-clean-analytics-classes +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: dev -Comment: This is just a dev maintenance, removing duplicated code. - - diff --git a/plugins/woocommerce/changelog/dev-pin-wp-deps-6 b/plugins/woocommerce/changelog/dev-pin-wp-deps-6 deleted file mode 100644 index 551e0919dac..00000000000 --- a/plugins/woocommerce/changelog/dev-pin-wp-deps-6 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Sync @wordpress package versions via syncpack. diff --git a/plugins/woocommerce/changelog/dev-update-eslint-plugin b/plugins/woocommerce/changelog/dev-update-eslint-plugin deleted file mode 100644 index 47894ec9c6c..00000000000 --- a/plugins/woocommerce/changelog/dev-update-eslint-plugin +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Fix lint issues diff --git a/plugins/woocommerce/changelog/e2e-fix-daily-k6-workflow-env-var b/plugins/woocommerce/changelog/e2e-fix-daily-k6-workflow-env-var deleted file mode 100644 index 65522dd597d..00000000000 --- a/plugins/woocommerce/changelog/e2e-fix-daily-k6-workflow-env-var +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev - -Fix the value of `UPDATE_WC` environment variable in the daily k6 performance tests. diff --git a/plugins/woocommerce/changelog/e2e-fix-failing-malta-test b/plugins/woocommerce/changelog/e2e-fix-failing-malta-test new file mode 100644 index 00000000000..cc9f444a669 --- /dev/null +++ b/plugins/woocommerce/changelog/e2e-fix-failing-malta-test @@ -0,0 +1,4 @@ +Significance: patch +Type: update + +Update OBW end to end test as WC Pay supports Malta now diff --git a/plugins/woocommerce/changelog/e2e-release-include-drafts b/plugins/woocommerce/changelog/e2e-release-include-drafts deleted file mode 100644 index a2a4d56118d..00000000000 --- a/plugins/woocommerce/changelog/e2e-release-include-drafts +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev - -Support E2E testing of draft releases. diff --git a/plugins/woocommerce/changelog/e2e-update-release-e2e-testing b/plugins/woocommerce/changelog/e2e-update-release-e2e-testing deleted file mode 100644 index 6f907635c94..00000000000 --- a/plugins/woocommerce/changelog/e2e-update-release-e2e-testing +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: update - -Updates automated release testing workflow to use Playwright diff --git a/plugins/woocommerce/changelog/feature-34905-marketing-campaigns-card b/plugins/woocommerce/changelog/feature-34905-marketing-campaigns-card deleted file mode 100644 index d578a5a71e9..00000000000 --- a/plugins/woocommerce/changelog/feature-34905-marketing-campaigns-card +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Add Campaigns card into Multichannel Marketing page. diff --git a/plugins/woocommerce/changelog/feature-34909-marketing-create-campaign-modal b/plugins/woocommerce/changelog/feature-34909-marketing-create-campaign-modal deleted file mode 100644 index 00be5a2596f..00000000000 --- a/plugins/woocommerce/changelog/feature-34909-marketing-create-campaign-modal +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Add "Create a new campaign" modal in Campaigns card in Multichannel Marketing page. diff --git a/plugins/woocommerce/changelog/feature-37176-specify-wp-data-resolution-args b/plugins/woocommerce/changelog/feature-37176-specify-wp-data-resolution-args deleted file mode 100644 index 2224143fc8e..00000000000 --- a/plugins/woocommerce/changelog/feature-37176-specify-wp-data-resolution-args +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix WP data resolution (`invalidateResolution`) not working with WP 5.9 in marketing page. diff --git a/plugins/woocommerce/changelog/fix-#34200-need-to-add-space-between-author-image-and-meta b/plugins/woocommerce/changelog/fix-#34200-need-to-add-space-between-author-image-and-meta deleted file mode 100644 index 962ff56149f..00000000000 --- a/plugins/woocommerce/changelog/fix-#34200-need-to-add-space-between-author-image-and-meta +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fix -Comment: Make Reviews table CSS match other list tables. - - diff --git a/plugins/woocommerce/changelog/fix-28969-modify-order-on-refund b/plugins/woocommerce/changelog/fix-28969-modify-order-on-refund deleted file mode 100644 index 57a4c3c9806..00000000000 --- a/plugins/woocommerce/changelog/fix-28969-modify-order-on-refund +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Update the date modified field for an order when a refund for it is successfully processed. diff --git a/plugins/woocommerce/changelog/fix-34391 b/plugins/woocommerce/changelog/fix-34391 deleted file mode 100644 index afbb07ece83..00000000000 --- a/plugins/woocommerce/changelog/fix-34391 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: tweak - -Make sure 'safe_text' settings are rendered as 'text' inputs for compatibility. diff --git a/plugins/woocommerce/changelog/fix-35543 b/plugins/woocommerce/changelog/fix-35543 deleted file mode 100644 index a427c9577b6..00000000000 --- a/plugins/woocommerce/changelog/fix-35543 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Prevent possible warning arising from use of woocommerce_wp_* family of functions. diff --git a/plugins/woocommerce/changelog/fix-36618-product-import b/plugins/woocommerce/changelog/fix-36618-product-import deleted file mode 100644 index 67560ceed4c..00000000000 --- a/plugins/woocommerce/changelog/fix-36618-product-import +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Ensure product importer imports all lines in a CSV file. diff --git a/plugins/woocommerce/changelog/fix-36711-obw-blank-screen-wp5_9 b/plugins/woocommerce/changelog/fix-36711-obw-blank-screen-wp5_9 deleted file mode 100644 index 4f39fe3029a..00000000000 --- a/plugins/woocommerce/changelog/fix-36711-obw-blank-screen-wp5_9 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix blank screen is displayed during OBW when using WP5.9 diff --git a/plugins/woocommerce/changelog/fix-36855-qty-selector-in-variables b/plugins/woocommerce/changelog/fix-36855-qty-selector-in-variables deleted file mode 100644 index 1f55fad5c17..00000000000 --- a/plugins/woocommerce/changelog/fix-36855-qty-selector-in-variables +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix no enforcing of min/max limits in quantity selector of variable products. diff --git a/plugins/woocommerce/changelog/fix-36890_create_wc_extension_script b/plugins/woocommerce/changelog/fix-36890_create_wc_extension_script deleted file mode 100644 index 253dcf4a315..00000000000 --- a/plugins/woocommerce/changelog/fix-36890_create_wc_extension_script +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Update create-wc-extension script within woocommerce-admin. diff --git a/plugins/woocommerce/changelog/fix-37020_duplicated_global_attribute b/plugins/woocommerce/changelog/fix-37020_duplicated_global_attribute deleted file mode 100644 index a698ac0c2d5..00000000000 --- a/plugins/woocommerce/changelog/fix-37020_duplicated_global_attribute +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: fix - -Fix duplicated global attribute diff --git a/plugins/woocommerce/changelog/fix-37021_add_validation_when_saving_attributes b/plugins/woocommerce/changelog/fix-37021_add_validation_when_saving_attributes deleted file mode 100644 index 81560990d51..00000000000 --- a/plugins/woocommerce/changelog/fix-37021_add_validation_when_saving_attributes +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Add validation when saving attributes and variations diff --git a/plugins/woocommerce/changelog/fix-37083-page_displays_0_for_empty_recommended_channels b/plugins/woocommerce/changelog/fix-37083-page_displays_0_for_empty_recommended_channels deleted file mode 100644 index 4e690c01a3a..00000000000 --- a/plugins/woocommerce/changelog/fix-37083-page_displays_0_for_empty_recommended_channels +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix 0 rendered on short-circuit evaluation. diff --git a/plugins/woocommerce/changelog/fix-arrayutil_get_value_or_default b/plugins/woocommerce/changelog/fix-arrayutil_get_value_or_default deleted file mode 100644 index 0c8dd965fab..00000000000 --- a/plugins/woocommerce/changelog/fix-arrayutil_get_value_or_default +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix ArrayUtil::get_value_or_default method not behaving as documented for null array values diff --git a/plugins/woocommerce/changelog/fix-cant-apply-coupon-0 b/plugins/woocommerce/changelog/fix-cant-apply-coupon-0 deleted file mode 100644 index d9066b3f2a1..00000000000 --- a/plugins/woocommerce/changelog/fix-cant-apply-coupon-0 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix the inability to apply a coupon whose code is "0" diff --git a/plugins/woocommerce/changelog/fix-import-of-draft-variations b/plugins/woocommerce/changelog/fix-import-of-draft-variations deleted file mode 100644 index 00f56b8dba5..00000000000 --- a/plugins/woocommerce/changelog/fix-import-of-draft-variations +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Fix variations exported as draft being imported as draft (and thus remaining invisible) diff --git a/plugins/woocommerce/changelog/fix-k6-baseline-imports b/plugins/woocommerce/changelog/fix-k6-baseline-imports deleted file mode 100644 index c6a3c6e2630..00000000000 --- a/plugins/woocommerce/changelog/fix-k6-baseline-imports +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev - -add wpLogin import to wc-baseline-load.js diff --git a/plugins/woocommerce/changelog/fix-order-cache-duplicate b/plugins/woocommerce/changelog/fix-order-cache-duplicate new file mode 100644 index 00000000000..1fb3ace0c40 --- /dev/null +++ b/plugins/woocommerce/changelog/fix-order-cache-duplicate @@ -0,0 +1,4 @@ +Significance: patch +Type: fix + +Overwrite clone method to prevent duplicate datq when saving a clone. diff --git a/plugins/woocommerce/changelog/fix-react-dependency-versions b/plugins/woocommerce/changelog/fix-react-dependency-versions deleted file mode 100644 index 026a7cd5b70..00000000000 --- a/plugins/woocommerce/changelog/fix-react-dependency-versions +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: fix - -Override react version to 17.0.2 diff --git a/plugins/woocommerce/changelog/fix-tt2-wp60-missing-padding-in-some-buttons b/plugins/woocommerce/changelog/fix-tt2-wp60-missing-padding-in-some-buttons deleted file mode 100644 index e4e172c8cf5..00000000000 --- a/plugins/woocommerce/changelog/fix-tt2-wp60-missing-padding-in-some-buttons +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Add default button padding to TT2 stylesheet to fix some visual issues in WP 5.9 and 6.0 diff --git a/plugins/woocommerce/changelog/fix-use-dbdelta-and-truncate-to-manage-attribute-lookup-tables b/plugins/woocommerce/changelog/fix-use-dbdelta-and-truncate-to-manage-attribute-lookup-tables deleted file mode 100644 index 5401b5ad760..00000000000 --- a/plugins/woocommerce/changelog/fix-use-dbdelta-and-truncate-to-manage-attribute-lookup-tables +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: performance - -Switch wc_product_attributes_lookup table management to use truncate and dbDelta over drop table diff --git a/plugins/woocommerce/changelog/fix-variations-dom-events b/plugins/woocommerce/changelog/fix-variations-dom-events deleted file mode 100644 index 1545c761283..00000000000 --- a/plugins/woocommerce/changelog/fix-variations-dom-events +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: fix -Comment: This fixes a bug which was introduced in a recent PR - - diff --git a/plugins/woocommerce/changelog/fix-wc_add_number_precision-not-supporting-null b/plugins/woocommerce/changelog/fix-wc_add_number_precision-not-supporting-null deleted file mode 100644 index e7b9ce5c13c..00000000000 --- a/plugins/woocommerce/changelog/fix-wc_add_number_precision-not-supporting-null +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Add support for null inputs to pnpm wc_add_number_precision diff --git a/plugins/woocommerce/changelog/improved_wc_price_to_display b/plugins/woocommerce/changelog/improved_wc_price_to_display deleted file mode 100644 index eb6339b83ab..00000000000 --- a/plugins/woocommerce/changelog/improved_wc_price_to_display +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: enhancement - -Add 'display_context' argument to wc_get_price_to_display(). diff --git a/plugins/woocommerce/changelog/issue-30104 b/plugins/woocommerce/changelog/issue-30104 deleted file mode 100644 index ac9273945ad..00000000000 --- a/plugins/woocommerce/changelog/issue-30104 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Log to order notes when coupons are removed or applied. diff --git a/plugins/woocommerce/changelog/issues-35004-attributes-saved-trigger b/plugins/woocommerce/changelog/issues-35004-attributes-saved-trigger deleted file mode 100644 index 7e4e46cc8a5..00000000000 --- a/plugins/woocommerce/changelog/issues-35004-attributes-saved-trigger +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: tweak - -Trigger event `woocommerce_attributes_saved` following successful product meta box ajax update. diff --git a/plugins/woocommerce/changelog/pr-36705 b/plugins/woocommerce/changelog/pr-36705 deleted file mode 100644 index c8308e99213..00000000000 --- a/plugins/woocommerce/changelog/pr-36705 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Added `woocommerce_widget_layered_nav_filters_start/end` hooks around layered nav filters widget \ No newline at end of file diff --git a/plugins/woocommerce/changelog/pr-37052 b/plugins/woocommerce/changelog/pr-37052 deleted file mode 100644 index c137f14ef99..00000000000 --- a/plugins/woocommerce/changelog/pr-37052 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Corrects a class reference in the ProductDownloadsServiceProvider. \ No newline at end of file diff --git a/plugins/woocommerce/changelog/pr-37056 b/plugins/woocommerce/changelog/pr-37056 deleted file mode 100644 index 569c062225f..00000000000 --- a/plugins/woocommerce/changelog/pr-37056 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Corrects class namespaces in Onboarding. It was missed during last restructuring. diff --git a/plugins/woocommerce/changelog/pr-37057 b/plugins/woocommerce/changelog/pr-37057 deleted file mode 100644 index 29c071af96e..00000000000 --- a/plugins/woocommerce/changelog/pr-37057 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Corrects a variable name in Reports\Stock\Stats. It was missed during the last name change. diff --git a/plugins/woocommerce/changelog/pr-37058 b/plugins/woocommerce/changelog/pr-37058 deleted file mode 100644 index 526d0042221..00000000000 --- a/plugins/woocommerce/changelog/pr-37058 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fix - -Corrects imported classes. Class names should not begin with a backslash. diff --git a/plugins/woocommerce/changelog/pr-36759 b/plugins/woocommerce/changelog/revert-36768-fix-36767-woocommerce_run_on_woocommerce_admin_updated-does-not-run similarity index 55% rename from plugins/woocommerce/changelog/pr-36759 rename to plugins/woocommerce/changelog/revert-36768-fix-36767-woocommerce_run_on_woocommerce_admin_updated-does-not-run index 5e9cda49931..c48f20c0c5b 100644 --- a/plugins/woocommerce/changelog/pr-36759 +++ b/plugins/woocommerce/changelog/revert-36768-fix-36767-woocommerce_run_on_woocommerce_admin_updated-does-not-run @@ -1,4 +1,5 @@ Significance: patch Type: fix +Comment: Revert #36768 + -fix typo in variable name \ No newline at end of file diff --git a/plugins/woocommerce/changelog/try-remove-e2e-waits b/plugins/woocommerce/changelog/try-remove-e2e-waits new file mode 100644 index 00000000000..8e07a999db3 --- /dev/null +++ b/plugins/woocommerce/changelog/try-remove-e2e-waits @@ -0,0 +1,4 @@ +Significance: patch +Type: tweak + +Remove timeouts in e2e tests for variable products and analytics. diff --git a/plugins/woocommerce/changelog/update-35887_spotlight_on_analytics_revenue b/plugins/woocommerce/changelog/update-35887_spotlight_on_analytics_revenue deleted file mode 100644 index 49596b65370..00000000000 --- a/plugins/woocommerce/changelog/update-35887_spotlight_on_analytics_revenue +++ /dev/null @@ -1,4 +0,0 @@ -Significance: major -Type: update - -Change the default date used on Revenue and Orders report to 'date_paid' and create spotlight on both reports diff --git a/plugins/woocommerce/changelog/update-36355_product_editor_package b/plugins/woocommerce/changelog/update-36355_product_editor_package deleted file mode 100644 index f78ff8529ce..00000000000 --- a/plugins/woocommerce/changelog/update-36355_product_editor_package +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Update imports of product slot fills to new @woocommerce/product-editor library diff --git a/plugins/woocommerce/changelog/update-36395-move-product-fields b/plugins/woocommerce/changelog/update-36395-move-product-fields deleted file mode 100644 index 82ab9e78887..00000000000 --- a/plugins/woocommerce/changelog/update-36395-move-product-fields +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Moving some components out of core and into product-editor package. diff --git a/plugins/woocommerce/changelog/update-36719 b/plugins/woocommerce/changelog/update-36719 deleted file mode 100644 index 896dc558a69..00000000000 --- a/plugins/woocommerce/changelog/update-36719 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Move product utils into product editor package diff --git a/plugins/woocommerce/changelog/update-36746-update-avalara-cta-copy b/plugins/woocommerce/changelog/update-36746-update-avalara-cta-copy deleted file mode 100644 index 5d00e4f782b..00000000000 --- a/plugins/woocommerce/changelog/update-36746-update-avalara-cta-copy +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: tweak - -Change Avalara CTA copy in tax task to Download diff --git a/plugins/woocommerce/changelog/update-ci-workflow-remove-wp-5-8 b/plugins/woocommerce/changelog/update-ci-workflow-remove-wp-5-8 deleted file mode 100644 index 49609065bb3..00000000000 --- a/plugins/woocommerce/changelog/update-ci-workflow-remove-wp-5-8 +++ /dev/null @@ -1,5 +0,0 @@ -Significance: patch -Type: update -Comment: workflow update. not part of release zip - - diff --git a/plugins/woocommerce/changelog/update-entity-store-endpoint-36990 b/plugins/woocommerce/changelog/update-entity-store-endpoint-36990 deleted file mode 100644 index d6f53eea345..00000000000 --- a/plugins/woocommerce/changelog/update-entity-store-endpoint-36990 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Updating rest namespace for product posttype to version 3. diff --git a/plugins/woocommerce/changelog/update-manage-stock-disabled b/plugins/woocommerce/changelog/update-manage-stock-disabled deleted file mode 100644 index 54bbac5922e..00000000000 --- a/plugins/woocommerce/changelog/update-manage-stock-disabled +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Show link to store settings when stock management is disabled. diff --git a/plugins/woocommerce/changelog/update-manage-stock-label b/plugins/woocommerce/changelog/update-manage-stock-label deleted file mode 100644 index 046a681b500..00000000000 --- a/plugins/woocommerce/changelog/update-manage-stock-label +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: tweak - -Rename "Manage stock?" label to "Stock management". diff --git a/plugins/woocommerce/changelog/update-move-ces-to-package b/plugins/woocommerce/changelog/update-move-ces-to-package deleted file mode 100644 index ca5584e0fec..00000000000 --- a/plugins/woocommerce/changelog/update-move-ces-to-package +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: dev - -Move CES components and utilities to @woocommerce/customer-effort-score diff --git a/plugins/woocommerce/changelog/update-move-product-hooks b/plugins/woocommerce/changelog/update-move-product-hooks deleted file mode 100644 index 5dbc28e2162..00000000000 --- a/plugins/woocommerce/changelog/update-move-product-hooks +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Moving use-product-helper and related product hooks to product editor package. diff --git a/plugins/woocommerce/changelog/update-move-remaining-ces-to-package b/plugins/woocommerce/changelog/update-move-remaining-ces-to-package new file mode 100644 index 00000000000..7bd3509065d --- /dev/null +++ b/plugins/woocommerce/changelog/update-move-remaining-ces-to-package @@ -0,0 +1,4 @@ +Significance: minor +Type: dev + +Move additional CES-related components to @woocommerce/customer-effort-score. diff --git a/plugins/woocommerce/changelog/update-product-page-add-hook-37281 b/plugins/woocommerce/changelog/update-product-page-add-hook-37281 new file mode 100644 index 00000000000..22f43052aba --- /dev/null +++ b/plugins/woocommerce/changelog/update-product-page-add-hook-37281 @@ -0,0 +1,4 @@ +Significance: minor +Type: update + +Replacing multiple components on the block product page with a single hook. diff --git a/plugins/woocommerce/changelog/update-product_rest_config b/plugins/woocommerce/changelog/update-product_rest_config deleted file mode 100644 index ee0d9c7fa68..00000000000 --- a/plugins/woocommerce/changelog/update-product_rest_config +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: add - -Update product post rest config when block editor feature is enabled. diff --git a/plugins/woocommerce/changelog/update-refactor-currency-context b/plugins/woocommerce/changelog/update-refactor-currency-context deleted file mode 100644 index 542b256874c..00000000000 --- a/plugins/woocommerce/changelog/update-refactor-currency-context +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Moving currencyContext to relevant package, and updating all references. diff --git a/plugins/woocommerce/changelog/update-stable-tag b/plugins/woocommerce/changelog/update-stable-tag deleted file mode 100644 index e5ee8f7e111..00000000000 --- a/plugins/woocommerce/changelog/update-stable-tag +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: dev -Comment: This PR updates the stable tag. No changelog entry is required. - diff --git a/plugins/woocommerce/changelog/update-stable-tag-7-5-1 b/plugins/woocommerce/changelog/update-stable-tag-7-5-1 new file mode 100644 index 00000000000..993c5ee05ab --- /dev/null +++ b/plugins/woocommerce/changelog/update-stable-tag-7-5-1 @@ -0,0 +1,4 @@ +Significance: patch +Type: dev +Comment: This PR updates stable tag, no changelog entry is required. + diff --git a/plugins/woocommerce/changelog/update-use-theme-color-for-completed-task-strikethrough b/plugins/woocommerce/changelog/update-use-theme-color-for-completed-task-strikethrough deleted file mode 100644 index 26d3972b2a4..00000000000 --- a/plugins/woocommerce/changelog/update-use-theme-color-for-completed-task-strikethrough +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Use the currently activated theme color for completed tasks strikethough diff --git a/plugins/woocommerce/changelog/update-variations-form b/plugins/woocommerce/changelog/update-variations-form deleted file mode 100644 index 15de2b48117..00000000000 --- a/plugins/woocommerce/changelog/update-variations-form +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Change Variations form shown in Variations tab when there are no variations created diff --git a/plugins/woocommerce/changelog/update-woocommerce-blocks-9.6.2 b/plugins/woocommerce/changelog/update-woocommerce-blocks-9.6.2 deleted file mode 100644 index 70c4f39490e..00000000000 --- a/plugins/woocommerce/changelog/update-woocommerce-blocks-9.6.2 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: update - -Update WooCommerce Blocks to 9.6.2 diff --git a/plugins/woocommerce/changelog/update-woocommerce-blocks-9.6.3 b/plugins/woocommerce/changelog/update-woocommerce-blocks-9.6.3 deleted file mode 100644 index 2d8f61daef0..00000000000 --- a/plugins/woocommerce/changelog/update-woocommerce-blocks-9.6.3 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: update - -Update WooCommerce Blocks to 9.6.3 diff --git a/plugins/woocommerce/changelog/update-woocommerce-blocks-9.8.0 b/plugins/woocommerce/changelog/update-woocommerce-blocks-9.8.0 deleted file mode 100644 index 6bcd9bc8231..00000000000 --- a/plugins/woocommerce/changelog/update-woocommerce-blocks-9.8.0 +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: update - -Update WooCommerce BLocks to 9.8.0 diff --git a/plugins/woocommerce/changelog/woocommerce-reduce-order-item-stock b/plugins/woocommerce/changelog/woocommerce-reduce-order-item-stock deleted file mode 100644 index 5c46be6f864..00000000000 --- a/plugins/woocommerce/changelog/woocommerce-reduce-order-item-stock +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: enhancement - -Added woocommerce_reduce_order_item_stock action hook diff --git a/plugins/woocommerce/client/legacy/css/twenty-twenty-three.scss b/plugins/woocommerce/client/legacy/css/twenty-twenty-three.scss index 0a3d6bad802..3613c74465f 100644 --- a/plugins/woocommerce/client/legacy/css/twenty-twenty-three.scss +++ b/plugins/woocommerce/client/legacy/css/twenty-twenty-three.scss @@ -365,63 +365,6 @@ } - // Description/Additional info/Reviews tabs. - .woocommerce-tabs { - padding-top: var(--wp--style--block-gap); - - ul.wc-tabs { - padding: 0; - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: #eae9eb; - - li { - opacity: 0.5; - color: var(--wp--preset--color--contrast); - margin: 0; - padding: 0.5em 1em 0.5em 1em; - border-color: #eae9eb; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - float: left; - border-style: solid; - border-width: 1px; - font-weight: 600; - font-size: var(--wp--preset--font-size--medium); - - &:first-child { - border-left-color: #eae9eb; - margin-left: 1em; - } - - &.active { - background: var(--wp--preset--color--tertiary); - color: var(--wp--preset--color--contrast); - opacity: 1; - } - - a { - text-decoration: none; - color: var(--wp--preset--color--contrast); - } - } - } - - .woocommerce-Tabs-panel { - padding-top: var(--wp--style--block-gap); - font-size: var(--wp--preset--font-size--small); - margin-left: 1em; - - h2 { - display: none; - } - - table.woocommerce-product-attributes { - text-align: left; - } - } - } - // Reviews tab. .woocommerce-Reviews { ol.commentlist { @@ -593,6 +536,63 @@ } +// Description/Additional info/Reviews tabs. +.woocommerce-tabs { + padding-top: var(--wp--style--block-gap); +} + +ul.wc-tabs { + padding: 0; + border-bottom-style: solid; + border-bottom-width: 1px; + border-bottom-color: #eae9eb; + + li { + opacity: 0.5; + color: var(--wp--preset--color--contrast); + margin: 0; + padding: 0.5em 1em 0.5em 1em; + border-color: #eae9eb; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + float: left; + border-style: solid; + border-width: 1px; + font-weight: 600; + font-size: var(--wp--preset--font-size--medium); + + &:first-child { + border-left-color: #eae9eb; + margin-left: 1em; + } + + &.active { + background: var(--wp--preset--color--tertiary); + color: var(--wp--preset--color--contrast); + opacity: 1; + } + + a { + text-decoration: none; + color: var(--wp--preset--color--contrast); + } + } +} + +.woocommerce-Tabs-panel { + padding-top: var(--wp--style--block-gap); + font-size: var(--wp--preset--font-size--small); + margin-left: 1em; + + h2 { + display: none; + } + + table.woocommerce-product-attributes { + text-align: left; + } +} + .woocommerce-page { .woocommerce-cart-form { diff --git a/plugins/woocommerce/client/legacy/css/twenty-twenty-two.scss b/plugins/woocommerce/client/legacy/css/twenty-twenty-two.scss index 1ae290e0ed2..be8519c50e1 100644 --- a/plugins/woocommerce/client/legacy/css/twenty-twenty-two.scss +++ b/plugins/woocommerce/client/legacy/css/twenty-twenty-two.scss @@ -369,63 +369,6 @@ $tt2-gray: #f7f7f7; } } - .woocommerce-tabs { - padding-top: var(--wp--style--block-gap); - - ul.wc-tabs { - padding: 0; - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: #eae9eb; - - li { - background: #eae9eb; - margin: 0; - padding: 0.5em 1em 0.5em 1em; - border-color: #eae9eb; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - float: left; - border-style: solid; - border-width: 1px; - border-left-color: var(--wp--preset--color--background); - font-weight: 600; - font-size: var(--wp--preset--font-size--medium); - - &:first-child { - border-left-color: #eae9eb; - margin-left: 1em; - } - - &.active { - box-shadow: 0 1px var(--wp--preset--color--background); - } - - a { - text-decoration: none; - } - } - } - - // Moved from blocktheme.scss to retain full styling. - ul.tabs li.active { - // Style active tab in theme colors. - background: var(--wp--preset--color--background, $contentbg); - border-bottom-color: var(--wp--preset--color--background, $contentbg); - } - - - .woocommerce-Tabs-panel { - padding-top: var(--wp--style--block-gap); - font-size: var(--wp--preset--font-size--small); - margin-left: 1em; - - h2 { - display: none; - } - } - } - .woocommerce-Reviews { ol.commentlist { list-style: none; @@ -603,6 +546,59 @@ $tt2-gray: #f7f7f7; } } +// Description/Additional info/Reviews tabs. +.woocommerce-tabs { + padding-top: var(--wp--style--block-gap); +} + +ul.wc-tabs { + padding: 0; + border-bottom-style: solid; + border-bottom-width: 1px; + border-bottom-color: #eae9eb; + + li { + background: #eae9eb; + margin: 0; + padding: 0.5em 1em 0.5em 1em; + border-color: #eae9eb; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + float: left; + border-style: solid; + border-width: 1px; + border-left-color: var(--wp--preset--color--background); + font-weight: 600; + font-size: var(--wp--preset--font-size--medium); + + &:first-child { + border-left-color: #eae9eb; + margin-left: 1em; + } + + &.active { + // Style active tab in theme colors. + background: var(--wp--preset--color--background, $contentbg); + border-bottom-color: var(--wp--preset--color--background, $contentbg); + box-shadow: 0 1px var(--wp--preset--color--background); + } + + a { + text-decoration: none; + } + } +} + +.woocommerce-Tabs-panel { + padding-top: var(--wp--style--block-gap); + font-size: var(--wp--preset--font-size--small); + margin-left: 1em; + + h2 { + display: none; + } +} + /** * Form fields */ diff --git a/plugins/woocommerce/composer.json b/plugins/woocommerce/composer.json index 81e73bfaf29..2ed1a3bd2a8 100644 --- a/plugins/woocommerce/composer.json +++ b/plugins/woocommerce/composer.json @@ -2,7 +2,7 @@ "name": "woocommerce/woocommerce", "description": "An eCommerce toolkit that helps you sell anything. Beautifully.", "homepage": "https://woocommerce.com/", - "version": "7.6.0", + "version": "7.7.0", "type": "wordpress-plugin", "license": "GPL-3.0-or-later", "prefer-stable": true, @@ -21,7 +21,7 @@ "maxmind-db/reader": "^1.11", "pelago/emogrifier": "^6.0", "woocommerce/action-scheduler": "3.5.4", - "woocommerce/woocommerce-blocks": "9.8.0" + "woocommerce/woocommerce-blocks": "9.8.1" }, "require-dev": { "automattic/jetpack-changelogger": "^3.3.0", diff --git a/plugins/woocommerce/composer.lock b/plugins/woocommerce/composer.lock index 294850b94a3..819a8e90eae 100644 --- a/plugins/woocommerce/composer.lock +++ b/plugins/woocommerce/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f08d44536a1162957e0edb212f042956", + "content-hash": "5c0ebd9977d69b819fa45b7b463fb356", "packages": [ { "name": "automattic/jetpack-autoloader", @@ -628,16 +628,16 @@ }, { "name": "woocommerce/woocommerce-blocks", - "version": "v9.8.0", + "version": "v9.8.1", "source": { "type": "git", "url": "https://github.com/woocommerce/woocommerce-blocks.git", - "reference": "e41d383535dc5daeea37e3bd700b950b33d6c1d0" + "reference": "2c336eb8304ca59ae9b9169cc8cc58b9ca529e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/woocommerce/woocommerce-blocks/zipball/e41d383535dc5daeea37e3bd700b950b33d6c1d0", - "reference": "e41d383535dc5daeea37e3bd700b950b33d6c1d0", + "url": "https://api.github.com/repos/woocommerce/woocommerce-blocks/zipball/2c336eb8304ca59ae9b9169cc8cc58b9ca529e5b", + "reference": "2c336eb8304ca59ae9b9169cc8cc58b9ca529e5b", "shasum": "" }, "require": { @@ -683,9 +683,9 @@ ], "support": { "issues": "https://github.com/woocommerce/woocommerce-blocks/issues", - "source": "https://github.com/woocommerce/woocommerce-blocks/tree/v9.8.0" + "source": "https://github.com/woocommerce/woocommerce-blocks/tree/v9.8.1" }, - "time": "2023-03-14T10:14:32+00:00" + "time": "2023-03-15T13:26:05+00:00" } ], "packages-dev": [ diff --git a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php index 951cb4dfab1..cab8f59eaab 100644 --- a/plugins/woocommerce/includes/abstracts/abstract-wc-order.php +++ b/plugins/woocommerce/includes/abstracts/abstract-wc-order.php @@ -131,6 +131,17 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order { } } + /** + * This method overwrites the base class's clone method to make it a no-op. In base class WC_Data, we are unsetting the meta_id to clone. + * It seems like this was done to avoid conflicting the metadata when duplicating products. However, doing that does not seems necessary for orders. + * In-fact, when we do that for orders, we lose the capability to clone orders with custom meta data by caching plugins. This is because, when we clone an order object for caching, it will clone the metadata without the ID. Unfortunately, when this cached object with nulled meta ID is retreived, WC_Data will consider it as a new meta and will insert it as a new meta-data causing duplicates. + * + * Eventually, we should move away from overwriting the __clone method in base class itself, since it's easily possible to still duplicate the product without having to hook into the __clone method. + * + * @since 7.6.0 + */ + public function __clone() {} + /** * Get internal type. * diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-assets.php b/plugins/woocommerce/includes/admin/class-wc-admin-assets.php index 02755717b0b..251486de4d8 100644 --- a/plugins/woocommerce/includes/admin/class-wc-admin-assets.php +++ b/plugins/woocommerce/includes/admin/class-wc-admin-assets.php @@ -56,12 +56,22 @@ if ( ! class_exists( 'WC_Admin_Assets', false ) ) : wp_style_add_data( 'woocommerce_admin_privacy_styles', 'rtl', 'replace' ); if ( $screen && $screen->is_block_editor() ) { - wp_register_style( 'woocommerce-general', WC()->plugin_url() . '/assets/css/woocommerce.css', array(), $version ); - wp_style_add_data( 'woocommerce-general', 'rtl', 'replace' ); - if ( wc_current_theme_is_fse_theme() ) { - wp_register_style( 'woocommerce-blocktheme', WC()->plugin_url() . '/assets/css/woocommerce-blocktheme.css', array(), $version ); - wp_style_add_data( 'woocommerce-blocktheme', 'rtl', 'replace' ); - wp_enqueue_style( 'woocommerce-blocktheme' ); + $styles = WC_Frontend_Scripts::get_styles(); + + if ( $styles ) { + foreach ( $styles as $handle => $args ) { + wp_register_style( + $handle, + $args['src'], + $args['deps'], + $args['version'], + $args['media'] + ); + + if ( ! isset( $args['has_rtl'] ) ) { + wp_style_add_data( $handle, 'rtl', 'replace' ); + } + } } } diff --git a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php index 952e063cd07..7b4c9674778 100644 --- a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php +++ b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php @@ -50,8 +50,8 @@ if ( ! defined( 'ABSPATH' ) ) { woocommerce_wp_text_input( array( 'id' => '_stock', - 'value' => wc_stock_amount( $product_object->get_stock_quantity( 'edit' ) ), - 'label' => __( 'Stock quantity', 'woocommerce' ), + 'value' => wc_stock_amount( $product_object->get_stock_quantity( 'edit' ) ?? 1 ), + 'label' => __( 'Quantity', 'woocommerce' ), 'desc_tip' => true, 'description' => __( 'Stock quantity. If this is a variable product this value will be used to control stock for all variations, unless you define stock at variation level.', 'woocommerce' ), 'type' => 'number', @@ -64,17 +64,28 @@ if ( ! defined( 'ABSPATH' ) ) { echo ''; - woocommerce_wp_select( - array( - 'id' => '_backorders', - 'value' => $product_object->get_backorders( 'edit' ), - 'label' => __( 'Allow backorders?', 'woocommerce' ), - 'options' => wc_get_product_backorder_options(), - 'desc_tip' => true, - 'description' => __( 'If managing stock, this controls whether or not backorders are allowed. If enabled, stock quantity can go below 0.', 'woocommerce' ), - ) + $backorder_args = array( + 'id' => '_backorders', + 'value' => $product_object->get_backorders( 'edit' ), + 'label' => __( 'Allow backorders?', 'woocommerce' ), + 'options' => wc_get_product_backorder_options(), + 'desc_tip' => true, + 'description' => __( 'If managing stock, this controls whether or not backorders are allowed. If enabled, stock quantity can go below 0.', 'woocommerce' ), ); + /** + * Allow 3rd parties to control whether "Allow backorder?" option will use radio buttons or a select. + * + * @since 7.6.0 + * + * @param bool If false, "Allow backorders?" will be shown as a select. Default: it will use radio buttons. + */ + if ( apply_filters( 'woocommerce_product_allow_backorder_use_radio', true ) ) { + woocommerce_wp_radio( $backorder_args ); + } else { + woocommerce_wp_select( $backorder_args ); + } + woocommerce_wp_text_input( array( 'id' => '_low_stock_amount', @@ -115,18 +126,31 @@ if ( ! defined( 'ABSPATH' ) ) { } - woocommerce_wp_select( - array( - 'id' => '_stock_status', - 'value' => $product_object->get_stock_status( 'edit' ), - 'wrapper_class' => 'stock_status_field hide_if_variable hide_if_external hide_if_grouped', - 'label' => __( 'Stock status', 'woocommerce' ), - 'options' => wc_get_product_stock_status_options(), - 'desc_tip' => true, - 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ), - ) + $stock_status_options = wc_get_product_stock_status_options(); + $stock_status_count = count( $stock_status_options ); + $stock_status_args = array( + 'id' => '_stock_status', + 'value' => $product_object->get_stock_status( 'edit' ), + 'wrapper_class' => 'stock_status_field hide_if_variable hide_if_external hide_if_grouped', + 'label' => __( 'Stock status', 'woocommerce' ), + 'options' => $stock_status_options, + 'desc_tip' => true, + 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ), ); + /** + * Allow 3rd parties to control whether the "Stock status" option will use radio buttons or a select. + * + * @since 7.6.0 + * + * @param bool If false, the "Stock status" will be shown as a select. Default: it will use radio buttons. + */ + if ( apply_filters( 'woocommerce_product_stock_status_use_radio', $stock_status_count <= 3 && $stock_status_count >= 1 ) ) { + woocommerce_wp_radio( $stock_status_args ); + } else { + woocommerce_wp_select( $stock_status_args ); + } + do_action( 'woocommerce_product_options_stock_status' ); ?>
diff --git a/plugins/woocommerce/includes/class-wc-ajax.php b/plugins/woocommerce/includes/class-wc-ajax.php index e291c78a2a0..b0e39aae036 100644 --- a/plugins/woocommerce/includes/class-wc-ajax.php +++ b/plugins/woocommerce/includes/class-wc-ajax.php @@ -1315,7 +1315,7 @@ class WC_AJAX { 'city' => isset( $_POST['city'] ) ? wc_strtoupper( wc_clean( wp_unslash( $_POST['city'] ) ) ) : '', ); - if ( ! is_array( $order_item_ids ) && is_numeric( $order_item_ids ) ) { + if ( is_numeric( $order_item_ids ) ) { $order_item_ids = array( $order_item_ids ); } @@ -1332,6 +1332,10 @@ class WC_AJAX { $item_id = absint( $item_id ); $item = $order->get_item( $item_id ); + if ( ! $item ) { + continue; + } + // Before deleting the item, adjust any stock values already reduced. if ( $item->is_type( 'line_item' ) ) { $changed_stock = wc_maybe_adjust_line_item_product_stock( $item, 0 ); @@ -1363,7 +1367,7 @@ class WC_AJAX { * @param bool|array|WP_Error $changed_store Result of wc_maybe_adjust_line_item_product_stock(). * @param bool|WC_Order|WC_Order_Refund $order As returned by wc_get_order(). */ - do_action( 'woocommerce_ajax_order_items_removed', $item_id, $item, $changed_stock, $order ); + do_action( 'woocommerce_ajax_order_items_removed', $item_id ?? 0, $item ?? false, $changed_stock ?? false, $order ); // Get HTML to return. ob_start(); diff --git a/plugins/woocommerce/includes/class-wc-install.php b/plugins/woocommerce/includes/class-wc-install.php index cfee24b3945..33e21419f48 100644 --- a/plugins/woocommerce/includes/class-wc-install.php +++ b/plugins/woocommerce/includes/class-wc-install.php @@ -1001,6 +1001,8 @@ class WC_Install { * woocommerce_order_itemmeta - Order line item meta is stored in a table for storing extra data. * woocommerce_tax_rates - Tax Rates are stored inside 2 tables making tax queries simple and efficient. * woocommerce_tax_rate_locations - Each rate can be applied to more than one postcode/city hence the second table. + * + * @return array Strings containing the results of the various update queries as returned by dbDelta. */ public static function create_tables() { global $wpdb; @@ -1015,7 +1017,7 @@ class WC_Install { */ if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}woocommerce_downloadable_product_permissions';" ) ) { if ( ! $wpdb->get_var( "SHOW COLUMNS FROM `{$wpdb->prefix}woocommerce_downloadable_product_permissions` LIKE 'permission_id';" ) ) { - $wpdb->query( "ALTER TABLE {$wpdb->prefix}woocommerce_downloadable_product_permissions DROP PRIMARY KEY, ADD `permission_id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT;" ); + $wpdb->query( "ALTER TABLE {$wpdb->prefix}woocommerce_downloadable_product_permissions DROP PRIMARY KEY, ADD `permission_id` bigint(20) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT;" ); } } @@ -1035,7 +1037,7 @@ class WC_Install { } } - dbDelta( self::get_schema() ); + $db_delta_result = dbDelta( self::get_schema() ); $index_exists = $wpdb->get_row( "SHOW INDEX FROM {$wpdb->comments} WHERE column_name = 'comment_type' and key_name = 'woo_idx_comment_type'" ); @@ -1047,6 +1049,8 @@ class WC_Install { // Clear table caches. delete_transient( 'wc_attribute_taxonomies' ); + + return $db_delta_result; } /** @@ -1085,16 +1089,16 @@ class WC_Install { $tables = " CREATE TABLE {$wpdb->prefix}woocommerce_sessions ( - session_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + session_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, session_key char(32) NOT NULL, session_value longtext NOT NULL, - session_expiry BIGINT UNSIGNED NOT NULL, + session_expiry bigint(20) unsigned NOT NULL, PRIMARY KEY (session_id), UNIQUE KEY session_key (session_key) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_api_keys ( - key_id BIGINT UNSIGNED NOT NULL auto_increment, - user_id BIGINT UNSIGNED NOT NULL, + key_id bigint(20) unsigned NOT NULL auto_increment, + user_id bigint(20) unsigned NOT NULL, description varchar(200) NULL, permissions varchar(10) NOT NULL, consumer_key char(64) NOT NULL, @@ -1107,7 +1111,7 @@ CREATE TABLE {$wpdb->prefix}woocommerce_api_keys ( KEY consumer_secret (consumer_secret) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_attribute_taxonomies ( - attribute_id BIGINT UNSIGNED NOT NULL auto_increment, + attribute_id bigint(20) unsigned NOT NULL auto_increment, attribute_name varchar(200) NOT NULL, attribute_label varchar(200) NULL, attribute_type varchar(20) NOT NULL, @@ -1117,17 +1121,17 @@ CREATE TABLE {$wpdb->prefix}woocommerce_attribute_taxonomies ( KEY attribute_name (attribute_name(20)) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_downloadable_product_permissions ( - permission_id BIGINT UNSIGNED NOT NULL auto_increment, + permission_id bigint(20) unsigned NOT NULL auto_increment, download_id varchar(36) NOT NULL, - product_id BIGINT UNSIGNED NOT NULL, - order_id BIGINT UNSIGNED NOT NULL DEFAULT 0, + product_id bigint(20) unsigned NOT NULL, + order_id bigint(20) unsigned NOT NULL DEFAULT 0, order_key varchar(200) NOT NULL, user_email varchar(200) NOT NULL, - user_id BIGINT UNSIGNED NULL, + user_id bigint(20) unsigned NULL, downloads_remaining varchar(9) NULL, access_granted datetime NOT NULL default '0000-00-00 00:00:00', access_expires datetime NULL default null, - download_count BIGINT UNSIGNED NOT NULL DEFAULT 0, + download_count bigint(20) unsigned NOT NULL DEFAULT 0, PRIMARY KEY (permission_id), KEY download_order_key_product (product_id,order_id,order_key(16),download_id), KEY download_order_product (download_id,order_id,product_id), @@ -1135,16 +1139,16 @@ CREATE TABLE {$wpdb->prefix}woocommerce_downloadable_product_permissions ( KEY user_order_remaining_expires (user_id,order_id,downloads_remaining,access_expires) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_order_items ( - order_item_id BIGINT UNSIGNED NOT NULL auto_increment, - order_item_name TEXT NOT NULL, + order_item_id bigint(20) unsigned NOT NULL auto_increment, + order_item_name text NOT NULL, order_item_type varchar(200) NOT NULL DEFAULT '', - order_id BIGINT UNSIGNED NOT NULL, + order_id bigint(20) unsigned NOT NULL, PRIMARY KEY (order_item_id), KEY order_id (order_id) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_order_itemmeta ( - meta_id BIGINT UNSIGNED NOT NULL auto_increment, - order_item_id BIGINT UNSIGNED NOT NULL, + meta_id bigint(20) unsigned NOT NULL auto_increment, + order_item_id bigint(20) unsigned NOT NULL, meta_key varchar(255) default NULL, meta_value longtext NULL, PRIMARY KEY (meta_id), @@ -1152,15 +1156,15 @@ CREATE TABLE {$wpdb->prefix}woocommerce_order_itemmeta ( KEY meta_key (meta_key(32)) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_tax_rates ( - tax_rate_id BIGINT UNSIGNED NOT NULL auto_increment, + tax_rate_id bigint(20) unsigned NOT NULL auto_increment, tax_rate_country varchar(2) NOT NULL DEFAULT '', tax_rate_state varchar(200) NOT NULL DEFAULT '', tax_rate varchar(8) NOT NULL DEFAULT '', tax_rate_name varchar(200) NOT NULL DEFAULT '', - tax_rate_priority BIGINT UNSIGNED NOT NULL, + tax_rate_priority bigint(20) unsigned NOT NULL, tax_rate_compound int(1) NOT NULL DEFAULT 0, tax_rate_shipping int(1) NOT NULL DEFAULT 1, - tax_rate_order BIGINT UNSIGNED NOT NULL, + tax_rate_order bigint(20) unsigned NOT NULL, tax_rate_class varchar(200) NOT NULL DEFAULT '', PRIMARY KEY (tax_rate_id), KEY tax_rate_country (tax_rate_country), @@ -1169,23 +1173,23 @@ CREATE TABLE {$wpdb->prefix}woocommerce_tax_rates ( KEY tax_rate_priority (tax_rate_priority) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_tax_rate_locations ( - location_id BIGINT UNSIGNED NOT NULL auto_increment, + location_id bigint(20) unsigned NOT NULL auto_increment, location_code varchar(200) NOT NULL, - tax_rate_id BIGINT UNSIGNED NOT NULL, + tax_rate_id bigint(20) unsigned NOT NULL, location_type varchar(40) NOT NULL, PRIMARY KEY (location_id), KEY tax_rate_id (tax_rate_id), KEY location_type_code (location_type(10),location_code(20)) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_shipping_zones ( - zone_id BIGINT UNSIGNED NOT NULL auto_increment, + zone_id bigint(20) unsigned NOT NULL auto_increment, zone_name varchar(200) NOT NULL, - zone_order BIGINT UNSIGNED NOT NULL, + zone_order bigint(20) unsigned NOT NULL, PRIMARY KEY (zone_id) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_locations ( - location_id BIGINT UNSIGNED NOT NULL auto_increment, - zone_id BIGINT UNSIGNED NOT NULL, + location_id bigint(20) unsigned NOT NULL auto_increment, + zone_id bigint(20) unsigned NOT NULL, location_code varchar(200) NOT NULL, location_type varchar(40) NOT NULL, PRIMARY KEY (location_id), @@ -1193,26 +1197,26 @@ CREATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_locations ( KEY location_type_code (location_type(10),location_code(20)) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_shipping_zone_methods ( - zone_id BIGINT UNSIGNED NOT NULL, - instance_id BIGINT UNSIGNED NOT NULL auto_increment, + zone_id bigint(20) unsigned NOT NULL, + instance_id bigint(20) unsigned NOT NULL auto_increment, method_id varchar(200) NOT NULL, - method_order BIGINT UNSIGNED NOT NULL, + method_order bigint(20) unsigned NOT NULL, is_enabled tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (instance_id) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_payment_tokens ( - token_id BIGINT UNSIGNED NOT NULL auto_increment, + token_id bigint(20) unsigned NOT NULL auto_increment, gateway_id varchar(200) NOT NULL, token text NOT NULL, - user_id BIGINT UNSIGNED NOT NULL DEFAULT '0', + user_id bigint(20) unsigned NOT NULL DEFAULT '0', type varchar(200) NOT NULL, is_default tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (token_id), KEY user_id (user_id) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_payment_tokenmeta ( - meta_id BIGINT UNSIGNED NOT NULL auto_increment, - payment_token_id BIGINT UNSIGNED NOT NULL, + meta_id bigint(20) unsigned NOT NULL auto_increment, + payment_token_id bigint(20) unsigned NOT NULL, meta_key varchar(255) NULL, meta_value longtext NULL, PRIMARY KEY (meta_id), @@ -1220,7 +1224,7 @@ CREATE TABLE {$wpdb->prefix}woocommerce_payment_tokenmeta ( KEY meta_key (meta_key(32)) ) $collate; CREATE TABLE {$wpdb->prefix}woocommerce_log ( - log_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + log_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, timestamp datetime NOT NULL, level smallint(4) NOT NULL, source varchar(200) NOT NULL, @@ -1230,10 +1234,10 @@ CREATE TABLE {$wpdb->prefix}woocommerce_log ( KEY level (level) ) $collate; CREATE TABLE {$wpdb->prefix}wc_webhooks ( - webhook_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + webhook_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, status varchar(200) NOT NULL, name text NOT NULL, - user_id BIGINT UNSIGNED NOT NULL, + user_id bigint(20) unsigned NOT NULL, delivery_url text NOT NULL, secret text NOT NULL, topic varchar(200) NOT NULL, @@ -1248,11 +1252,11 @@ CREATE TABLE {$wpdb->prefix}wc_webhooks ( KEY user_id (user_id) ) $collate; CREATE TABLE {$wpdb->prefix}wc_download_log ( - download_log_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + download_log_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, timestamp datetime NOT NULL, - permission_id BIGINT UNSIGNED NOT NULL, - user_id BIGINT UNSIGNED NULL, - user_ip_address VARCHAR(100) NULL DEFAULT '', + permission_id bigint(20) unsigned NOT NULL, + user_id bigint(20) unsigned NULL, + user_ip_address varchar(100) NULL DEFAULT '', PRIMARY KEY (download_log_id), KEY permission_id (permission_id), KEY timestamp (timestamp) @@ -1281,7 +1285,7 @@ CREATE TABLE {$wpdb->prefix}wc_product_meta_lookup ( KEY min_max_price (`min_price`, `max_price`) ) $collate; CREATE TABLE {$wpdb->prefix}wc_tax_rate_classes ( - tax_rate_class_id BIGINT UNSIGNED NOT NULL auto_increment, + tax_rate_class_id bigint(20) unsigned NOT NULL auto_increment, name varchar(200) NOT NULL DEFAULT '', slug varchar(200) NOT NULL DEFAULT '', PRIMARY KEY (tax_rate_class_id), @@ -1296,18 +1300,18 @@ CREATE TABLE {$wpdb->prefix}wc_reserved_stock ( PRIMARY KEY (`order_id`, `product_id`) ) $collate; CREATE TABLE {$wpdb->prefix}wc_rate_limits ( - rate_limit_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + rate_limit_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, rate_limit_key varchar(200) NOT NULL, - rate_limit_expiry BIGINT UNSIGNED NOT NULL, + rate_limit_expiry bigint(20) unsigned NOT NULL, rate_limit_remaining smallint(10) NOT NULL DEFAULT '0', PRIMARY KEY (rate_limit_id), UNIQUE KEY rate_limit_key (rate_limit_key($max_index_length)) ) $collate; $product_attributes_lookup_table_creation_sql CREATE TABLE {$wpdb->prefix}wc_product_download_directories ( - url_id BIGINT UNSIGNED NOT NULL auto_increment, + url_id bigint(20) unsigned NOT NULL auto_increment, url varchar(256) NOT NULL, - enabled TINYINT(1) NOT NULL DEFAULT 0, + enabled tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY (url_id), KEY url (url($max_index_length)) ) $collate; @@ -1323,22 +1327,22 @@ CREATE TABLE {$wpdb->prefix}wc_order_stats ( tax_total double DEFAULT 0 NOT NULL, shipping_total double DEFAULT 0 NOT NULL, net_total double DEFAULT 0 NOT NULL, - returning_customer boolean DEFAULT NULL, + returning_customer tinyint(1) DEFAULT NULL, status varchar(200) NOT NULL, - customer_id BIGINT UNSIGNED NOT NULL, + customer_id bigint(20) unsigned NOT NULL, PRIMARY KEY (order_id), KEY date_created (date_created), KEY customer_id (customer_id), KEY status (status({$max_index_length})) ) $collate; CREATE TABLE {$wpdb->prefix}wc_order_product_lookup ( - order_item_id BIGINT UNSIGNED NOT NULL, - order_id BIGINT UNSIGNED NOT NULL, - product_id BIGINT UNSIGNED NOT NULL, - variation_id BIGINT UNSIGNED NOT NULL, - customer_id BIGINT UNSIGNED NULL, + order_item_id bigint(20) unsigned NOT NULL, + order_id bigint(20) unsigned NOT NULL, + product_id bigint(20) unsigned NOT NULL, + variation_id bigint(20) unsigned NOT NULL, + customer_id bigint(20) unsigned NULL, date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, - product_qty INT NOT NULL, + product_qty int(11) NOT NULL, product_net_revenue double DEFAULT 0 NOT NULL, product_gross_revenue double DEFAULT 0 NOT NULL, coupon_amount double DEFAULT 0 NOT NULL, @@ -1352,8 +1356,8 @@ CREATE TABLE {$wpdb->prefix}wc_order_product_lookup ( KEY date_created (date_created) ) $collate; CREATE TABLE {$wpdb->prefix}wc_order_tax_lookup ( - order_id BIGINT UNSIGNED NOT NULL, - tax_rate_id BIGINT UNSIGNED NOT NULL, + order_id bigint(20) unsigned NOT NULL, + tax_rate_id bigint(20) unsigned NOT NULL, date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, shipping_tax double DEFAULT 0 NOT NULL, order_tax double DEFAULT 0 NOT NULL, @@ -1363,8 +1367,8 @@ CREATE TABLE {$wpdb->prefix}wc_order_tax_lookup ( KEY date_created (date_created) ) $collate; CREATE TABLE {$wpdb->prefix}wc_order_coupon_lookup ( - order_id BIGINT UNSIGNED NOT NULL, - coupon_id BIGINT NOT NULL, + order_id bigint(20) unsigned NOT NULL, + coupon_id bigint(20) NOT NULL, date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, discount_amount double DEFAULT 0 NOT NULL, PRIMARY KEY (order_id, coupon_id), @@ -1372,7 +1376,7 @@ CREATE TABLE {$wpdb->prefix}wc_order_coupon_lookup ( KEY date_created (date_created) ) $collate; CREATE TABLE {$wpdb->prefix}wc_admin_notes ( - note_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + note_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, type varchar(20) NOT NULL, locale varchar(20) NOT NULL, @@ -1383,17 +1387,17 @@ CREATE TABLE {$wpdb->prefix}wc_admin_notes ( source varchar(200) NOT NULL, date_created datetime NOT NULL default '0000-00-00 00:00:00', date_reminder datetime NULL default null, - is_snoozable boolean DEFAULT 0 NOT NULL, + is_snoozable tinyint(1) DEFAULT 0 NOT NULL, layout varchar(20) DEFAULT '' NOT NULL, image varchar(200) NULL DEFAULT NULL, - is_deleted boolean DEFAULT 0 NOT NULL, - is_read boolean DEFAULT 0 NOT NULL, + is_deleted tinyint(1) DEFAULT 0 NOT NULL, + is_read tinyint(1) DEFAULT 0 NOT NULL, icon varchar(200) NOT NULL default 'info', PRIMARY KEY (note_id) ) $collate; CREATE TABLE {$wpdb->prefix}wc_admin_note_actions ( - action_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, - note_id BIGINT UNSIGNED NOT NULL, + action_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, + note_id bigint(20) unsigned NOT NULL, name varchar(255) NOT NULL, label varchar(255) NOT NULL, query longtext NOT NULL, @@ -1405,8 +1409,8 @@ CREATE TABLE {$wpdb->prefix}wc_admin_note_actions ( KEY note_id (note_id) ) $collate; CREATE TABLE {$wpdb->prefix}wc_customer_lookup ( - customer_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, - user_id BIGINT UNSIGNED DEFAULT NULL, + customer_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, + user_id bigint(20) unsigned DEFAULT NULL, username varchar(60) DEFAULT '' NOT NULL, first_name varchar(255) NOT NULL, last_name varchar(255) NOT NULL, @@ -1422,8 +1426,8 @@ CREATE TABLE {$wpdb->prefix}wc_customer_lookup ( KEY email (email) ) $collate; CREATE TABLE {$wpdb->prefix}wc_category_lookup ( - category_tree_id BIGINT UNSIGNED NOT NULL, - category_id BIGINT UNSIGNED NOT NULL, + category_tree_id bigint(20) unsigned NOT NULL, + category_id bigint(20) unsigned NOT NULL, PRIMARY KEY (category_tree_id,category_id) ) $collate; "; diff --git a/plugins/woocommerce/includes/class-wc-order-factory.php b/plugins/woocommerce/includes/class-wc-order-factory.php index 3851a048f49..acce3cfcf8d 100644 --- a/plugins/woocommerce/includes/class-wc-order-factory.php +++ b/plugins/woocommerce/includes/class-wc-order-factory.php @@ -67,20 +67,25 @@ class WC_Order_Factory { * @throws \Exception When an invalid order is found. */ public static function get_orders( $order_ids = array(), $skip_invalid = false ) { - $result = array(); - $order_ids = array_filter( array_map( array( __CLASS__, 'get_order_id' ), $order_ids ) ); + if ( empty( $order_ids ) ) { + return array(); + } + + $result = array(); + $order_ids = array_filter( array_map( array( __CLASS__, 'get_order_id' ), $order_ids ) ); + $original_order_sort = $order_ids; + $order_cache = wc_get_container()->get( OrderCache::class ); $already_cached_orders = array(); $use_orders_cache = OrderUtil::orders_cache_usage_is_enabled(); if ( $use_orders_cache ) { $uncached_order_ids = array(); - $order_cache = wc_get_container()->get( OrderCache::class ); foreach ( $order_ids as $order_id ) { $cached_order = $order_cache->get( absint( $order_id ) ); - if ( is_null( $cached_order ) ) { - $uncached_order_ids[] = $order_id; + if ( $cached_order instanceof \WC_Abstract_Legacy_Order ) { + $already_cached_orders[ $order_id ] = $cached_order; } else { - $already_cached_orders[] = $cached_order; + $uncached_order_ids[] = $order_id; } } $order_ids = $uncached_order_ids; @@ -128,17 +133,16 @@ class WC_Order_Factory { } } - // restore the sort order. - $result = array_values( array_replace( array_flip( $order_ids ), $result ) ); - if ( $use_orders_cache ) { - foreach ( $result as $order ) { - $order_cache->set( $order ); + foreach ( $result as $order_id => $order ) { + $order_cache->set( $order, $order->get_id() ); } - return array_merge( $already_cached_orders, $result ); - } else { - return $result; + $result = array_replace( $result, $already_cached_orders ); } + + // restore the sort order. + $result = array_values( array_replace( array_flip( $original_order_sort ), $result ) ); + return $result; } /** diff --git a/plugins/woocommerce/includes/class-wc-post-data.php b/plugins/woocommerce/includes/class-wc-post-data.php index b27cfe47db8..c1e3aa6b5f0 100644 --- a/plugins/woocommerce/includes/class-wc-post-data.php +++ b/plugins/woocommerce/includes/class-wc-post-data.php @@ -54,6 +54,7 @@ class WC_Post_Data { add_action( 'wp_trash_post', array( __CLASS__, 'trash_post' ) ); add_action( 'untrashed_post', array( __CLASS__, 'untrash_post' ) ); add_action( 'before_delete_post', array( __CLASS__, 'before_delete_order' ) ); + add_action( 'woocommerce_before_delete_order', array( __CLASS__, 'before_delete_order' ) ); // Meta cache flushing. add_action( 'updated_post_meta', array( __CLASS__, 'flush_object_meta_cache' ), 10, 4 ); diff --git a/plugins/woocommerce/includes/class-wc-post-types.php b/plugins/woocommerce/includes/class-wc-post-types.php index 326102f9788..5fcb68552a5 100644 --- a/plugins/woocommerce/includes/class-wc-post-types.php +++ b/plugins/woocommerce/includes/class-wc-post-types.php @@ -387,6 +387,46 @@ class WC_Post_Types { 'name' => 'Product name', ), ), + array( + 'woocommerce/product-summary', + ), + array( + 'core/columns', + array(), + array( + array( + 'core/column', + array( + 'templateLock' => 'all', + ), + array( + array( + 'woocommerce/product-pricing', + array( + 'name' => 'regular_price', + 'label' => __( 'List price', 'woocommerce' ), + 'showPricingSection' => true, + ), + ), + ), + ), + array( + 'core/column', + array( + 'templateLock' => 'all', + ), + array( + array( + 'woocommerce/product-pricing', + array( + 'name' => 'sale_price', + 'label' => __( 'Sale price', 'woocommerce' ), + ), + ), + ), + ), + ), + ), ), ), ), diff --git a/plugins/woocommerce/includes/class-wc-webhook.php b/plugins/woocommerce/includes/class-wc-webhook.php index 16d98af9ad3..3200b989057 100644 --- a/plugins/woocommerce/includes/class-wc-webhook.php +++ b/plugins/woocommerce/includes/class-wc-webhook.php @@ -274,21 +274,25 @@ class WC_Webhook extends WC_Legacy_Webhook { private function is_valid_resource( $arg ) { $resource = $this->get_resource(); - if ( in_array( $resource, array( 'order', 'product', 'coupon' ), true ) ) { + if ( in_array( $resource, array( 'product', 'coupon' ), true ) ) { $status = get_post_status( absint( $arg ) ); // Ignore auto drafts for all resources. if ( in_array( $status, array( 'auto-draft', 'new' ), true ) ) { return false; } + } - // Ignore standard drafts for orders. - if ( 'order' === $resource && 'draft' === $status ) { + if ( 'order' === $resource ) { + // Check registered order types for order types args. + if ( ! OrderUtil::is_order( absint( $arg ), wc_get_order_types( 'order-webhooks' ) ) ) { return false; } - // Check registered order types for order types args. - if ( 'order' === $resource && ! OrderUtil::is_order( absint( $arg ), wc_get_order_types( 'order-webhooks' ) ) ) { + $order = wc_get_order( absint( $arg ) ); + + // Ignore standard drafts for orders. + if ( in_array( $order->get_status(), array( 'draft', 'auto-draft', 'new' ), true ) ) { return false; } } diff --git a/plugins/woocommerce/includes/class-woocommerce.php b/plugins/woocommerce/includes/class-woocommerce.php index 5ae2b3aa4fd..1ed57dc4cea 100644 --- a/plugins/woocommerce/includes/class-woocommerce.php +++ b/plugins/woocommerce/includes/class-woocommerce.php @@ -32,7 +32,7 @@ final class WooCommerce { * * @var string */ - public $version = '7.6.0'; + public $version = '7.7.0'; /** * WooCommerce Schema version. diff --git a/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php b/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php index fad3a54eca4..b26a0875462 100644 --- a/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php +++ b/plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php @@ -413,6 +413,89 @@ abstract class Abstract_WC_Order_Data_Store_CPT extends WC_Data_Store_WP impleme return $items; } + /** + * Return the order type of a given item which belongs to WC_Order. + * + * @since 3.2.0 + * @param WC_Order $order Order Object. + * @param int $order_item_id Order item id. + * @return string Order Item type + */ + public function get_order_item_type( $order, $order_item_id ) { + global $wpdb; + return $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT order_item_type FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d and order_item_id = %d;", $order->get_id(), $order_item_id ) ); + } + + /** + * Prime following caches: + * 1. item-$order_item_id For individual items. + * 2. order-items-$order-id For fetching items associated with an order. + * 3. order-item meta. + * + * @param array $order_ids Order Ids to prime cache for. + * @param array $query_vars Query vars for the query. + */ + protected function prime_order_item_caches_for_orders( $order_ids, $query_vars ) { + global $wpdb; + if ( isset( $query_vars['fields'] ) && 'all' !== $query_vars['fields'] ) { + $line_items = array( + 'line_items', + 'shipping_lines', + 'fee_lines', + 'coupon_lines', + ); + + if ( is_array( $query_vars['fields'] ) && 0 === count( array_intersect( $line_items, $query_vars['fields'] ) ) ) { + return; + } + } + $cache_keys = array_map( + function ( $order_id ) { + return 'order-items-' . $order_id; + }, + $order_ids + ); + $cache_values = wc_cache_get_multiple( $cache_keys, 'orders' ); + $non_cached_ids = array(); + foreach ( $order_ids as $order_id ) { + if ( false === $cache_values[ 'order-items-' . $order_id ] ) { + $non_cached_ids[] = $order_id; + } + } + if ( empty( $non_cached_ids ) ) { + return; + } + + $non_cached_ids = esc_sql( $non_cached_ids ); + $non_cached_ids_string = implode( ',', $non_cached_ids ); + $order_items = $wpdb->get_results( + // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + "SELECT order_item_type, order_item_id, order_id, order_item_name FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id in ( $non_cached_ids_string ) ORDER BY order_item_id;" + ); + if ( empty( $order_items ) ) { + return; + } + + $order_items_for_all_orders = array_reduce( + $order_items, + function ( $order_items_collection, $order_item ) { + if ( ! isset( $order_items_collection[ $order_item->order_id ] ) ) { + $order_items_collection[ $order_item->order_id ] = array(); + } + $order_items_collection[ $order_item->order_id ][] = $order_item; + return $order_items_collection; + } + ); + foreach ( $order_items_for_all_orders as $order_id => $items ) { + wp_cache_set( 'order-items-' . $order_id, $items, 'orders' ); + } + foreach ( $order_items as $item ) { + wp_cache_set( 'item-' . $item->order_item_id, $item, 'order-items' ); + } + $order_item_ids = wp_list_pluck( $order_items, 'order_item_id' ); + update_meta_cache( 'order_item', $order_item_ids ); + } + /** * Remove all line items (products, coupons, shipping, taxes) from the order. * diff --git a/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php b/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php index b8e26142e44..a8982de92ee 100644 --- a/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php +++ b/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php @@ -1118,76 +1118,6 @@ class WC_Order_Data_Store_CPT extends Abstract_WC_Order_Data_Store_CPT implement } } - /** - * Prime following caches: - * 1. item-$order_item_id For individual items. - * 2. order-items-$order-id For fetching items associated with an order. - * 3. order-item meta. - * - * @param array $order_ids Order Ids to prime cache for. - * @param array $query_vars Query vars for the query. - */ - private function prime_order_item_caches_for_orders( $order_ids, $query_vars ) { - global $wpdb; - if ( isset( $query_vars['fields'] ) && 'all' !== $query_vars['fields'] ) { - $line_items = array( - 'line_items', - 'shipping_lines', - 'fee_lines', - 'coupon_lines', - ); - - if ( is_array( $query_vars['fields'] ) && 0 === count( array_intersect( $line_items, $query_vars['fields'] ) ) ) { - return; - } - } - $cache_keys = array_map( - function ( $order_id ) { - return 'order-items-' . $order_id; - }, - $order_ids - ); - $cache_values = wc_cache_get_multiple( $cache_keys, 'orders' ); - $non_cached_ids = array(); - foreach ( $order_ids as $order_id ) { - if ( false === $cache_values[ 'order-items-' . $order_id ] ) { - $non_cached_ids[] = $order_id; - } - } - if ( empty( $non_cached_ids ) ) { - return; - } - - $non_cached_ids = esc_sql( $non_cached_ids ); - $non_cached_ids_string = implode( ',', $non_cached_ids ); - $order_items = $wpdb->get_results( - // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared - "SELECT order_item_type, order_item_id, order_id, order_item_name FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id in ( $non_cached_ids_string ) ORDER BY order_item_id;" - ); - if ( empty( $order_items ) ) { - return; - } - - $order_items_for_all_orders = array_reduce( - $order_items, - function ( $order_items_collection, $order_item ) { - if ( ! isset( $order_items_collection[ $order_item->order_id ] ) ) { - $order_items_collection[ $order_item->order_id ] = array(); - } - $order_items_collection[ $order_item->order_id ][] = $order_item; - return $order_items_collection; - } - ); - foreach ( $order_items_for_all_orders as $order_id => $items ) { - wp_cache_set( 'order-items-' . $order_id, $items, 'orders' ); - } - foreach ( $order_items as $item ) { - wp_cache_set( 'item-' . $item->order_item_id, $item, 'order-items' ); - } - $order_item_ids = wp_list_pluck( $order_items, 'order_item_id' ); - update_meta_cache( 'order_item', $order_item_ids ); - } - /** * Prime cache for raw meta data for orders in bulk. Difference between this and WP built-in metadata is that this method also fetches `meta_id` field which we use and cache it. * @@ -1240,17 +1170,4 @@ class WC_Order_Data_Store_CPT extends Abstract_WC_Order_Data_Store_CPT implement ); WC_Order::prime_raw_meta_data_cache( $raw_meta_data_collection, 'orders' ); } - - /** - * Return the order type of a given item which belongs to WC_Order. - * - * @since 3.2.0 - * @param WC_Order $order Order Object. - * @param int $order_item_id Order item id. - * @return string Order Item type - */ - public function get_order_item_type( $order, $order_item_id ) { - global $wpdb; - return $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT order_item_type FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d and order_item_id = %d;", $order->get_id(), $order_item_id ) ); - } } diff --git a/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php b/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php index abbe84d47c9..c7060844fef 100644 --- a/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php +++ b/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php @@ -327,6 +327,29 @@ class WC_REST_Orders_V2_Controller extends WC_REST_CRUD_Controller { return $result; } + /** + * With HPOS, few internal meta keys such as _billing_address_index, _shipping_address_index are not considered internal anymore (since most internal keys were flattened into dedicated columns). + * + * This function helps in filtering out any remaining internal meta keys with HPOS is enabled. + * + * @param array $meta_data Order meta data. + * + * @return array Filtered order meta data. + */ + private function filter_internal_meta_keys( $meta_data ) { + if ( ! OrderUtil::custom_orders_table_usage_is_enabled() ) { + return $meta_data; + } + $cpt_hidden_keys = ( new \WC_Order_Data_Store_CPT() )->get_internal_meta_keys(); + $meta_data = array_filter( + $meta_data, + function ( $meta ) use ( $cpt_hidden_keys ) { + return ! in_array( $meta->key, $cpt_hidden_keys, true ); + } + ); + return array_values( $meta_data ); + } + /** * Get formatted item data. * @@ -371,6 +394,7 @@ class WC_REST_Orders_V2_Controller extends WC_REST_CRUD_Controller { case 'meta_data': $meta_data = $order->get_meta_data(); $data['meta_data'] = $this->get_meta_data_for_response( $this->request, $meta_data ); + $data['meta_data'] = $this->filter_internal_meta_keys( $data['meta_data'] ); break; case 'line_items': $data['line_items'] = $order->get_items( 'line_item' ); diff --git a/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-orders-controller.php b/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-orders-controller.php index 106dac9a77f..27f979b244d 100644 --- a/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-orders-controller.php +++ b/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-orders-controller.php @@ -238,33 +238,6 @@ class WC_REST_Orders_Controller extends WC_REST_Orders_V2_Controller { } } - /** - * Get formatted item data. - * - * @param WC_Order $order WC_Data instance. - * @return array - */ - protected function get_formatted_item_data( $order ) { - $item_data = parent::get_formatted_item_data( $order ); - $cpt_hidden_keys = array(); - - if ( OrderUtil::custom_orders_table_usage_is_enabled() ) { - $cpt_hidden_keys = ( new \WC_Order_Data_Store_CPT() )->get_internal_meta_keys(); - } - - // XXX: This might be removed once we finalize the design for internal keys vs meta vs props in COT. - if ( ! empty( $item_data['meta_data'] ) ) { - $item_data['meta_data'] = array_filter( - $item_data['meta_data'], - function( $meta ) use ( $cpt_hidden_keys ) { - return ! in_array( $meta->key, $cpt_hidden_keys, true ); - } - ); - } - - return $item_data; - } - /** * Prepare objects query. * diff --git a/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php b/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php index 4c332f2cc11..184e9888dbb 100644 --- a/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php +++ b/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php @@ -64,7 +64,8 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V * @return WP_REST_Response */ public function prepare_object_for_response( $object, $request ) { - $data = array( + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; + $data = array( 'id' => $object->get_id(), 'date_created' => wc_rest_prepare_date_response( $object->get_date_created(), false ), 'date_created_gmt' => wc_rest_prepare_date_response( $object->get_date_created() ), @@ -105,13 +106,12 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V ), 'shipping_class' => $object->get_shipping_class(), 'shipping_class_id' => $object->get_shipping_class_id(), - 'image' => $this->get_image( $object ), + 'image' => $this->get_image( $object, $context ), 'attributes' => $this->get_attributes( $object ), 'menu_order' => $object->get_menu_order(), 'meta_data' => $object->get_meta_data(), ); - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); @@ -352,10 +352,11 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V * Get the image for a product variation. * * @param WC_Product_Variation $variation Variation data. + * @param string $context Context of the request: 'view' or 'edit'. * @return array */ - protected function get_image( $variation ) { - if ( ! $variation->get_image_id() ) { + protected function get_image( $variation, $context = 'view' ) { + if ( ! $variation->get_image_id( $context ) ) { return; } diff --git a/plugins/woocommerce/includes/tracks/events/class-wc-settings-tracking.php b/plugins/woocommerce/includes/tracks/events/class-wc-settings-tracking.php index 714a5fe9e58..46803b1d13a 100644 --- a/plugins/woocommerce/includes/tracks/events/class-wc-settings-tracking.php +++ b/plugins/woocommerce/includes/tracks/events/class-wc-settings-tracking.php @@ -28,6 +28,16 @@ class WC_Settings_Tracking { */ protected $updated_options = array(); + /** + * Toggled options. + * + * @var array + */ + protected $toggled_options = array( + 'enabled' => array(), + 'disabled' => array(), + ); + /** * Init tracking. */ @@ -81,6 +91,12 @@ class WC_Settings_Tracking { return; } + // Check and save toggled options. + if ( in_array( $new_value, array( 'yes', 'no' ), true ) && in_array( $old_value, array( 'yes', 'no' ), true ) ) { + $option_state = 'yes' === $new_value ? 'enabled' : 'disabled'; + $this->toggled_options[ $option_state ][] = $option_name; + } + $this->updated_options[] = $option_name; } @@ -98,13 +114,15 @@ class WC_Settings_Tracking { 'settings' => implode( ',', $this->updated_options ), ); - if ( isset( $current_tab ) ) { - $properties['tab'] = $current_tab; - } - if ( isset( $current_section ) ) { - $properties['section'] = $current_section; + foreach ( $this->toggled_options as $state => $options ) { + if ( ! empty( $options ) ) { + $properties[ $state ] = implode( ',', $options ); + } } + $properties['tab'] = $current_tab ?? ''; + $properties['section'] = $current_section ?? ''; + WC_Tracks::record_event( 'settings_change', $properties ); } diff --git a/plugins/woocommerce/includes/wc-product-functions.php b/plugins/woocommerce/includes/wc-product-functions.php index 746069ef5f2..f27291d3ca9 100644 --- a/plugins/woocommerce/includes/wc-product-functions.php +++ b/plugins/woocommerce/includes/wc-product-functions.php @@ -1001,13 +1001,18 @@ function wc_get_price_including_tax( $product, $args = array() ) { if ( $product->is_taxable() ) { if ( ! wc_prices_include_tax() ) { - $tax_rates = WC_Tax::get_rates( $product->get_tax_class() ); - $taxes = WC_Tax::calc_tax( $line_price, $tax_rates, false ); - - if ( 'yes' === get_option( 'woocommerce_tax_round_at_subtotal' ) ) { - $taxes_total = array_sum( $taxes ); + // If the customer is exempt from VAT, set tax total to 0. + if ( ! empty( WC()->customer ) && WC()->customer->get_is_vat_exempt() ) { + $taxes_total = 0.00; } else { - $taxes_total = array_sum( array_map( 'wc_round_tax_total', $taxes ) ); + $tax_rates = WC_Tax::get_rates( $product->get_tax_class() ); + $taxes = WC_Tax::calc_tax( $line_price, $tax_rates, false ); + + if ( 'yes' === get_option( 'woocommerce_tax_round_at_subtotal' ) ) { + $taxes_total = array_sum( $taxes ); + } else { + $taxes_total = array_sum( array_map( 'wc_round_tax_total', $taxes ) ); + } } $return_price = NumberUtil::round( $line_price + $taxes_total, wc_get_price_decimals() ); @@ -1016,7 +1021,7 @@ function wc_get_price_including_tax( $product, $args = array() ) { $base_tax_rates = WC_Tax::get_base_tax_rates( $product->get_tax_class( 'unfiltered' ) ); /** - * If the customer is excempt from VAT, remove the taxes here. + * If the customer is exempt from VAT, remove the taxes here. * Either remove the base or the user taxes depending on woocommerce_adjust_non_base_location_prices setting. */ if ( ! empty( WC()->customer ) && WC()->customer->get_is_vat_exempt() ) { // @codingStandardsIgnoreLine. diff --git a/plugins/woocommerce/includes/wc-user-functions.php b/plugins/woocommerce/includes/wc-user-functions.php index 6b98a8a8df0..7b53871b454 100644 --- a/plugins/woocommerce/includes/wc-user-functions.php +++ b/plugins/woocommerce/includes/wc-user-functions.php @@ -714,16 +714,40 @@ function wc_get_customer_order_count( $user_id ) { function wc_reset_order_customer_id_on_deleted_user( $user_id ) { global $wpdb; - $wpdb->update( - $wpdb->postmeta, - array( - 'meta_value' => 0, - ), - array( - 'meta_key' => '_customer_user', - 'meta_value' => $user_id, - ) - ); // WPCS: slow query ok. + if ( OrderUtil::custom_orders_table_usage_is_enabled() ) { + $order_table_ds = wc_get_container()->get( OrdersTableDataStore::class ); + $order_table = $order_table_ds::get_orders_table_name(); + $wpdb->update( + $order_table, + array( + 'customer_id' => 0, + 'date_updated_gmt' => current_time( 'mysql', true ), + ), + array( + 'customer_id' => $user_id, + ), + array( + '%d', + '%s', + ), + array( + '%d', + ) + ); + } + + if ( ! OrderUtil::custom_orders_table_usage_is_enabled() || OrderUtil::is_custom_order_tables_in_sync() ) { + $wpdb->update( + $wpdb->postmeta, + array( + 'meta_value' => 0, //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value + ), + array( + 'meta_key' => '_customer_user', //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key + 'meta_value' => $user_id, //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value + ) + ); + } } add_action( 'deleted_user', 'wc_reset_order_customer_id_on_deleted_user' ); diff --git a/plugins/woocommerce/package.json b/plugins/woocommerce/package.json index 48fb5ce4db4..11639ea1bb9 100644 --- a/plugins/woocommerce/package.json +++ b/plugins/woocommerce/package.json @@ -1,7 +1,7 @@ { "name": "woocommerce", "title": "WooCommerce", - "version": "7.6.0", + "version": "7.7.0", "homepage": "https://woocommerce.com/", "repository": { "type": "git", diff --git a/plugins/woocommerce/readme.txt b/plugins/woocommerce/readme.txt index 7614651e0b0..efff28109f1 100644 --- a/plugins/woocommerce/readme.txt +++ b/plugins/woocommerce/readme.txt @@ -4,7 +4,7 @@ Tags: online store, ecommerce, shop, shopping cart, sell online, storefront, che Requires at least: 5.9 Tested up to: 6.1 Requires PHP: 7.2 -Stable tag: 7.4.1 +Stable tag: 7.5.1 License: GPLv3 License URI: https://www.gnu.org/licenses/gpl-3.0.html @@ -163,6 +163,6 @@ WooCommerce comes with some sample data you can use to see how products look; im == Changelog == -= 7.6.0 2023-XX-XX = += 7.7.0 2023-XX-XX = [See changelog for all versions](https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/changelog.txt). diff --git a/plugins/woocommerce/src/Admin/API/Init.php b/plugins/woocommerce/src/Admin/API/Init.php index 80d74c8c2ad..d0e6197ec7e 100644 --- a/plugins/woocommerce/src/Admin/API/Init.php +++ b/plugins/woocommerce/src/Admin/API/Init.php @@ -90,6 +90,7 @@ class Init { 'Automattic\WooCommerce\Admin\API\NavigationFavorites', 'Automattic\WooCommerce\Admin\API\Taxes', 'Automattic\WooCommerce\Admin\API\MobileAppMagicLink', + 'Automattic\WooCommerce\Admin\API\ShippingPartnerSuggestions', ); $product_form_controllers = array(); diff --git a/plugins/woocommerce/src/Admin/API/Orders.php b/plugins/woocommerce/src/Admin/API/Orders.php index e85bec04c10..64138466a65 100644 --- a/plugins/woocommerce/src/Admin/API/Orders.php +++ b/plugins/woocommerce/src/Admin/API/Orders.php @@ -10,6 +10,8 @@ namespace Automattic\WooCommerce\Admin\API; defined( 'ABSPATH' ) || exit; use Automattic\WooCommerce\Admin\API\Reports\Controller as ReportsController; +use Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore; +use Automattic\WooCommerce\Utilities\OrderUtil; /** * Orders controller. @@ -54,30 +56,61 @@ class Orders extends \WC_REST_Orders_Controller { * @return array */ protected function prepare_objects_query( $request ) { - global $wpdb; $args = parent::prepare_objects_query( $request ); - // Search by partial order number. if ( ! empty( $request['number'] ) ) { - $partial_number = trim( $request['number'] ); - $limit = intval( $args['posts_per_page'] ); - $order_ids = $wpdb->get_col( + $args = $this->search_partial_order_number( $request['number'], $args ); + } + + return $args; + } + + /** + * Helper method to allow searching by partial order number. + * + * @param int $number Partial order number match. + * @param array $args List of arguments for the request. + * + * @return array Modified args with partial order search included. + */ + private function search_partial_order_number( $number, $args ) { + global $wpdb; + + $partial_number = trim( $number ); + $limit = intval( $args['posts_per_page'] ); + if ( OrderUtil::custom_orders_table_usage_is_enabled() ) { + $order_table_name = OrdersTableDataStore::get_orders_table_name(); + // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $orders_table_name is hardcoded. + $order_ids = $wpdb->get_col( $wpdb->prepare( - "SELECT ID - FROM {$wpdb->prefix}posts - WHERE post_type = 'shop_order' - AND ID LIKE %s + "SELECT id + FROM $order_table_name + WHERE type = 'shop_order' + AND id LIKE %s LIMIT %d", $wpdb->esc_like( absint( $partial_number ) ) . '%', $limit ) ); - - // Force WP_Query return empty if don't found any order. - $order_ids = empty( $order_ids ) ? array( 0 ) : $order_ids; - $args['post__in'] = $order_ids; + // phpcs:enable + } else { + $order_ids = $wpdb->get_col( + $wpdb->prepare( + "SELECT ID + FROM {$wpdb->prefix}posts + WHERE post_type = 'shop_order' + AND ID LIKE %s + LIMIT %d", + $wpdb->esc_like( absint( $partial_number ) ) . '%', + $limit + ) + ); } + // Force WP_Query return empty if don't found any order. + $order_ids = empty( $order_ids ) ? array( 0 ) : $order_ids; + $args['post__in'] = $order_ids; + return $args; } diff --git a/plugins/woocommerce/src/Admin/API/PaymentGatewaySuggestions.php b/plugins/woocommerce/src/Admin/API/PaymentGatewaySuggestions.php index d0a83050b49..14d51cb4485 100644 --- a/plugins/woocommerce/src/Admin/API/PaymentGatewaySuggestions.php +++ b/plugins/woocommerce/src/Admin/API/PaymentGatewaySuggestions.php @@ -168,6 +168,16 @@ class PaymentGatewaySuggestions extends \WC_REST_Data_Controller { 'context' => array( 'view', 'edit' ), 'readonly' => true, ), + 'transaction_processors' => array( + 'description' => __( 'Array of transaction processors and their images.', 'woocommerce' ), + 'type' => 'object', + 'addtionalProperties' => array( + 'type' => 'string', + 'format' => 'uri', + ), + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), ), ); diff --git a/plugins/woocommerce/src/Admin/API/Reports/Customers/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Customers/DataStore.php index 848a5d862ca..18a4d7a8c4c 100644 --- a/plugins/woocommerce/src/Admin/API/Reports/Customers/DataStore.php +++ b/plugins/woocommerce/src/Admin/API/Reports/Customers/DataStore.php @@ -84,7 +84,19 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { * Set up all the hooks for maintaining and populating table data. */ public static function init() { - add_action( 'edit_user_profile_update', array( __CLASS__, 'update_registered_customer' ) ); + add_action( 'woocommerce_new_customer', array( __CLASS__, 'update_registered_customer' ) ); + + add_action( 'woocommerce_update_customer', array( __CLASS__, 'update_registered_customer' ) ); + add_action( 'profile_update', array( __CLASS__, 'update_registered_customer' ) ); + + add_action( 'added_user_meta', array( __CLASS__, 'update_registered_customer_via_last_active' ), 10, 3 ); + add_action( 'updated_user_meta', array( __CLASS__, 'update_registered_customer_via_last_active' ), 10, 3 ); + + add_action( 'delete_user', array( __CLASS__, 'delete_customer_by_user_id' ) ); + add_action( 'remove_user_from_blog', array( __CLASS__, 'delete_customer_by_user_id' ) ); + + add_action( 'woocommerce_privacy_remove_order_personal_data', array( __CLASS__, 'anonymize_customer' ) ); + add_action( 'woocommerce_analytics_delete_order_stats', array( __CLASS__, 'sync_on_order_delete' ), 15, 2 ); } @@ -775,6 +787,20 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { return $results; } + /** + * Update the database if the "last active" meta value was changed. + * Function expects to be hooked into the `added_user_meta` and `updated_user_meta` actions. + * + * @param int $meta_id ID of updated metadata entry. + * @param int $user_id ID of the user being updated. + * @param string $meta_key Meta key being updated. + */ + public static function update_registered_customer_via_last_active( $meta_id, $user_id, $meta_key ) { + if ( 'wc_last_active' === $meta_key ) { + self::update_registered_customer( $user_id ); + } + } + /** * Check if a user ID is a valid customer or other user role with past orders. * @@ -835,6 +861,11 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { public static function delete_customer_by_user_id( $user_id ) { global $wpdb; + if ( (int) $user_id < 1 || doing_action( 'wp_uninitialize_site' ) ) { + // Skip the deletion. + return; + } + $user_id = (int) $user_id; $num_deleted = $wpdb->delete( self::get_db_table_name(), array( 'user_id' => $user_id ) ); @@ -843,6 +874,59 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { } } + /** + * Anonymize the customer data for a single order. + * + * @internal + * @param int $order_id Order id. + * @return void + */ + public static function anonymize_customer( $order_id ) { + global $wpdb; + + $customer_id = $wpdb->get_var( + $wpdb->prepare( "SELECT customer_id FROM {$wpdb->prefix}wc_order_stats WHERE order_id = %d", $order_id ) + ); + + if ( ! $customer_id ) { + return; + } + + // Long form query because $wpdb->update rejects [deleted]. + $deleted_text = __( '[deleted]', 'woocommerce' ); + $updated = $wpdb->query( + $wpdb->prepare( + "UPDATE {$wpdb->prefix}wc_customer_lookup + SET + user_id = NULL, + username = %s, + first_name = %s, + last_name = %s, + email = %s, + country = '', + postcode = %s, + city = %s, + state = %s + WHERE + customer_id = %d", + array( + $deleted_text, + $deleted_text, + $deleted_text, + 'deleted@site.invalid', + $deleted_text, + $deleted_text, + $deleted_text, + $customer_id, + ) + ) + ); + // If the customer row was anonymized, flush the cache. + if ( $updated ) { + ReportsCache::invalidate(); + } + } + /** * Initialize query objects. */ diff --git a/plugins/woocommerce/src/Admin/API/Reports/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/DataStore.php index b84c843d281..082d36992dc 100644 --- a/plugins/woocommerce/src/Admin/API/Reports/DataStore.php +++ b/plugins/woocommerce/src/Admin/API/Reports/DataStore.php @@ -1305,11 +1305,10 @@ class DataStore extends SqlQuery { * Returns product attribute subquery elements used in JOIN and WHERE clauses, * based on query arguments from the user. * - * @param array $query_args Parameters supplied by the user. - * @param string $table_name Database table name. + * @param array $query_args Parameters supplied by the user. * @return array */ - protected function get_attribute_subqueries( $query_args, $table_name ) { + protected function get_attribute_subqueries( $query_args ) { global $wpdb; $sql_clauses = array( @@ -1363,11 +1362,11 @@ class DataStore extends SqlQuery { $meta_value = esc_sql( $attribute_term[1] ); } - $join_alias = 'orderitemmeta1'; + $join_alias = 'orderitemmeta1'; + $table_to_join_on = "{$wpdb->prefix}wc_order_product_lookup"; if ( empty( $sql_clauses['join'] ) ) { - $table_name = esc_sql( $table_name ); - $sql_clauses['join'][] = "JOIN {$wpdb->prefix}woocommerce_order_items orderitems ON orderitems.order_id = {$table_name}.order_id"; + $sql_clauses['join'][] = "JOIN {$wpdb->prefix}woocommerce_order_items orderitems ON orderitems.order_id = {$table_to_join_on}.order_id"; } // If we're matching all filters (AND), we'll need multiple JOINs on postmeta. @@ -1375,7 +1374,7 @@ class DataStore extends SqlQuery { if ( 'AND' === $match_operator || 1 === count( $sql_clauses['join'] ) ) { $join_idx = count( $sql_clauses['join'] ); $join_alias = 'orderitemmeta' . $join_idx; - $sql_clauses['join'][] = "JOIN {$wpdb->prefix}woocommerce_order_itemmeta as {$join_alias} ON {$join_alias}.order_item_id = orderitems.order_item_id"; + $sql_clauses['join'][] = "JOIN {$wpdb->prefix}woocommerce_order_itemmeta as {$join_alias} ON {$join_alias}.order_item_id = {$table_to_join_on}.order_item_id"; } // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared diff --git a/plugins/woocommerce/src/Admin/API/Reports/Orders/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Orders/DataStore.php index e2523030c87..0c8a86a607d 100644 --- a/plugins/woocommerce/src/Admin/API/Reports/Orders/DataStore.php +++ b/plugins/woocommerce/src/Admin/API/Reports/Orders/DataStore.php @@ -191,7 +191,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { $where_subquery[] = "{$order_tax_lookup_table}.tax_rate_id NOT IN ({$excluded_tax_rates}) OR {$order_tax_lookup_table}.tax_rate_id IS NULL"; } - $attribute_subqueries = $this->get_attribute_subqueries( $query_args, $order_stats_lookup_table ); + $attribute_subqueries = $this->get_attribute_subqueries( $query_args ); if ( $attribute_subqueries['join'] && $attribute_subqueries['where'] ) { $this->subquery->add_sql_clause( 'join', "JOIN {$order_product_lookup_table} ON {$order_stats_lookup_table}.order_id = {$order_product_lookup_table}.order_id" ); diff --git a/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php index 45d3245686d..897d5ce44df 100644 --- a/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php +++ b/plugins/woocommerce/src/Admin/API/Reports/Orders/Stats/DataStore.php @@ -113,6 +113,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { * Set up all the hooks for maintaining and populating table data. */ public static function init() { + add_action( 'woocommerce_before_delete_order', array( __CLASS__, 'delete_order' ) ); add_action( 'delete_post', array( __CLASS__, 'delete_order' ) ); } @@ -208,7 +209,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { ); // Product attribute filters. - $attribute_subqueries = $this->get_attribute_subqueries( $query_args, $orders_stats_table ); + $attribute_subqueries = $this->get_attribute_subqueries( $query_args ); if ( $attribute_subqueries['join'] && $attribute_subqueries['where'] ) { // Build a subquery for getting order IDs by product attribute(s). // Done here since our use case is a little more complicated than get_object_where_filter() can handle. diff --git a/plugins/woocommerce/src/Admin/API/Reports/Variations/DataStore.php b/plugins/woocommerce/src/Admin/API/Reports/Variations/DataStore.php index 7b86926db3f..6b84a8c216d 100644 --- a/plugins/woocommerce/src/Admin/API/Reports/Variations/DataStore.php +++ b/plugins/woocommerce/src/Admin/API/Reports/Variations/DataStore.php @@ -119,7 +119,7 @@ class DataStore extends ReportsDataStore implements DataStoreInterface { */ protected function get_order_item_by_attribute_subquery( $query_args ) { $order_product_lookup_table = self::get_db_table_name(); - $attribute_subqueries = $this->get_attribute_subqueries( $query_args, $order_product_lookup_table ); + $attribute_subqueries = $this->get_attribute_subqueries( $query_args ); if ( $attribute_subqueries['join'] && $attribute_subqueries['where'] ) { // Perform a subquery for DISTINCT order items that match our attribute filters. diff --git a/plugins/woocommerce/src/Admin/API/ShippingPartnerSuggestions.php b/plugins/woocommerce/src/Admin/API/ShippingPartnerSuggestions.php new file mode 100644 index 00000000000..0c5c8c2a95d --- /dev/null +++ b/plugins/woocommerce/src/Admin/API/ShippingPartnerSuggestions.php @@ -0,0 +1,212 @@ +namespace, + '/' . $this->rest_base, + array( + array( + 'methods' => \WP_REST_Server::READABLE, + 'callback' => array( $this, 'get_suggestions' ), + 'permission_callback' => array( $this, 'get_permission_check' ), + 'args' => array( + 'force_default_suggestions' => array( + 'type' => 'boolean', + 'description' => __( 'Return the default shipping partner suggestions when woocommerce_show_marketplace_suggestions option is set to no', 'woocommerce' ), + ), + ), + ), + 'schema' => array( $this, 'get_suggestions_schema' ), + ) + ); + + } + + /** + * Check if a given request has access to manage plugins. + * + * @param WP_REST_Request $request Full details about the request. + * @return WP_Error|boolean + */ + public function get_permission_check( $request ) { + if ( ! current_user_can( 'install_plugins' ) ) { + return new \WP_Error( 'woocommerce_rest_cannot_update', __( 'Sorry, you cannot manage plugins.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) ); + } + return true; + } + + /** + * Check if suggestions should be shown in the settings screen. + * + * @return bool + */ + private function should_display() { + if ( 'no' === get_option( 'woocommerce_show_marketplace_suggestions', 'yes' ) ) { + return false; + } + + /** + * The return value can be controlled via woocommerce_allow_shipping_partner_suggestions filter. + * + * @since 7.4.1 + */ + return apply_filters( 'woocommerce_allow_shipping_partner_suggestions', true ); + } + + /** + * Return suggested shipping partners. + * + * @param WP_REST_Request $request Full details about the request. + * @return \WP_Error|\WP_HTTP_Response|\WP_REST_Response + */ + public function get_suggestions( $request ) { + $should_display = $this->should_display(); + $force_default = $request->get_param( 'force_default_suggestions' ); + + if ( $should_display ) { + return Suggestions::get_suggestions(); + } elseif ( false === $should_display && true === $force_default ) { + return rest_ensure_response( Suggestions::get_suggestions( DefaultShippingPartners::get_all() ) ); + } + + return rest_ensure_response( Suggestions::get_suggestions( DefaultShippingPartners::get_all() ) ); + } + + /** + * Get the schema, conforming to JSON Schema. + * + * @return array + */ + public static function get_suggestions_schema() { + $feature_def = array( + 'type' => 'array', + 'items' => array( + 'type' => 'object', + 'properties' => array( + 'icon' => array( + 'type' => 'string', + ), + 'title' => array( + 'type' => 'string', + ), + 'description' => array( + 'type' => 'string', + ), + ), + ), + ); + $layout_def = array( + 'type' => 'object', + 'properties' => array( + 'image' => array( + 'type' => 'string', + 'description' => '', + ), + 'features' => $feature_def, + ), + ); + + $item_schema = array( + 'type' => 'object', + 'required' => array( 'name', 'is_visible', 'available_layouts' ), + // require layout_row or layout_column. One of them must exist. + 'anyOf' => array( + array( + 'required' => 'layout_row', + ), + array( + 'required' => 'layout_column', + ), + ), + 'properties' => array( + 'name' => array( + 'description' => __( 'Plugin name.', 'woocommerce' ), + 'type' => 'string', + 'required' => true, + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), + 'slug' => array( + 'description' => __( 'Plugin slug used in https://wordpress.org/plugins/{slug}.', 'woocommerce' ), + 'type' => 'string', + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), + 'layout_row' => $layout_def, + 'layout_column' => $layout_def, + 'description' => array( + 'description' => __( 'Description', 'woocommerce' ), + 'type' => 'string', + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), + 'learn_more_link' => array( + 'description' => __( 'Learn more link .', 'woocommerce' ), + 'type' => 'string', + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), + 'is_visible' => array( + 'description' => __( 'Suggestion visibility.', 'woocommerce' ), + 'type' => 'boolean', + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), + 'available_layouts' => array( + 'description' => __( 'Available layouts -- single, dual, or both', 'woocommerce' ), + 'type' => 'array', + 'items' => array( + 'type' => 'string', + 'enum' => array( 'row', 'column' ), + ), + 'context' => array( 'view', 'edit' ), + 'readonly' => true, + ), + ), + ); + + $schema = array( + '$schema' => 'http://json-schema.org/draft-04/schema#', + 'title' => 'shipping-partner-suggestions', + 'type' => 'array', + 'items' => array( $item_schema ), + ); + + return $schema; + } +} diff --git a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/GetMobileApp.php b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/GetMobileApp.php index 8e0c9548327..e03b880ba5b 100644 --- a/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/GetMobileApp.php +++ b/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/GetMobileApp.php @@ -90,7 +90,7 @@ class GetMobileApp extends Task { private static function is_current_user_connected() { if ( class_exists( '\Automattic\Jetpack\Connection\Manager' ) && method_exists( '\Automattic\Jetpack\Connection\Manager', 'is_user_connected' ) ) { $connection = new Manager(); - return $connection->is_user_connected(); + return $connection->is_connection_owner(); } return false; } diff --git a/plugins/woocommerce/src/Admin/Features/PaymentGatewaySuggestions/DefaultPaymentGateways.php b/plugins/woocommerce/src/Admin/Features/PaymentGatewaySuggestions/DefaultPaymentGateways.php index b9f8999fca3..b23fc7b06c4 100644 --- a/plugins/woocommerce/src/Admin/Features/PaymentGatewaySuggestions/DefaultPaymentGateways.php +++ b/plugins/woocommerce/src/Admin/Features/PaymentGatewaySuggestions/DefaultPaymentGateways.php @@ -47,6 +47,263 @@ class DefaultPaymentGateways { */ public static function get_all() { $payment_gateways = array( + array( + 'id' => 'affirm', + 'title' => __( 'Affirm', 'woocommerce' ), + 'content' => __( 'Affirm’s tailored Buy Now Pay Later programs remove price as a barrier, turning browsers into buyers, increasing average order value, and expanding your customer base.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/affirm.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/affirm.png', + 'plugins' => array(), + 'external_link' => 'https://woocommerce.com/products/woocommerce-gateway-affirm', + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'US', + 'CA', + ) + ), + ), + 'category_other' => array(), + 'category_additional' => array( + 'US', + 'CA', + ), + ), + array( + 'id' => 'afterpay', + 'title' => __( 'Afterpay', 'woocommerce' ), + 'content' => __( 'Afterpay allows customers to receive products immediately and pay for purchases over four installments, always interest-free.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/afterpay.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/afterpay.png', + 'plugins' => array( 'afterpay-gateway-for-woocommerce' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'US', + 'CA', + 'AU', + ) + ), + ), + 'category_other' => array(), + 'category_additional' => array( + 'US', + 'CA', + 'AU', + ), + ), + array( + 'id' => 'amazon_payments_advanced', + 'title' => __( 'Amazon Pay', 'woocommerce' ), + 'content' => __( 'Enable a familiar, fast checkout for hundreds of millions of active Amazon customers globally.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/amazonpay.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/amazonpay.png', + 'plugins' => array( 'woocommerce-gateway-amazon-payments-advanced' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'US', + 'AT', + 'BE', + 'CY', + 'DK', + 'ES', + 'FR', + 'DE', + 'GB', + 'HU', + 'IE', + 'IT', + 'LU', + 'NL', + 'PT', + 'SL', + 'SE', + 'JP', + ) + ), + ), + 'category_other' => array(), + 'category_additional' => array( + 'US', + 'AT', + 'BE', + 'CY', + 'DK', + 'ES', + 'FR', + 'DE', + 'GB', + 'HU', + 'IE', + 'IT', + 'LU', + 'NL', + 'PT', + 'SL', + 'SE', + 'JP', + ), + ), + array( + 'id' => 'bacs', + 'title' => __( 'Direct bank transfer', 'woocommerce' ), + 'content' => __( 'Take payments via bank transfer.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/bacs.svg', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/bacs.png', + 'is_visible' => array( + self::get_rules_for_cbd( false ), + ), + 'is_offline' => true, + ), + array( + 'id' => 'cod', + 'title' => __( 'Cash on delivery', 'woocommerce' ), + 'content' => __( 'Take payments in cash upon delivery.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/cod.svg', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/cod.png', + 'is_visible' => array( + self::get_rules_for_cbd( false ), + ), + 'is_offline' => true, + ), + array( + 'id' => 'eway', + 'title' => __( 'Eway', 'woocommerce' ), + 'content' => __( 'The Eway extension for WooCommerce allows you to take credit card payments directly on your store without redirecting your customers to a third party site to make payment.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/eway.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/eway.png', + 'plugins' => array( 'woocommerce-gateway-eway' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'NZ', + 'HK', + 'SG', + 'AU', + ) + ), + self::get_rules_for_cbd( false ), + ), + 'category_other' => array( + 'NZ', + 'HK', + 'SG', + 'AU', + ), + 'category_additional' => array(), + ), + array( + 'id' => 'kco', + 'title' => __( 'Klarna Checkout', 'woocommerce' ), + 'content' => __( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/klarna-black.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/klarna.png', + 'plugins' => array( 'klarna-checkout-for-woocommerce' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'NO', + 'SE', + 'FI', + ) + ), + self::get_rules_for_cbd( false ), + ), + 'category_other' => array( + 'NO', + 'SE', + 'FI', + ), + 'category_additional' => array(), + ), + array( + 'id' => 'klarna_payments', + 'title' => __( 'Klarna Payments', 'woocommerce' ), + 'content' => __( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/klarna-black.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/klarna.png', + 'plugins' => array( 'klarna-payments-for-woocommerce' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'AT', + 'BE', + 'CH', + 'DK', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'IT', + 'NL', + 'NO', + 'PL', + 'SE', + ) + ), + self::get_rules_for_cbd( false ), + ), + 'category_other' => array(), + 'category_additional' => array( + 'US', + 'CA', + 'AT', + 'BE', + 'CH', + 'DK', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'IT', + 'NL', + 'NO', + 'PL', + 'SE', + ), + ), + array( + 'id' => 'mollie_wc_gateway_banktransfer', + 'title' => __( 'Mollie', 'woocommerce' ), + 'content' => __( 'Effortless payments by Mollie: Offer global and local payment methods, get onboarded in minutes, and supported in your language.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/mollie.svg', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/mollie.png', + 'plugins' => array( 'mollie-payments-for-woocommerce' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'AT', + 'BE', + 'CH', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'IT', + 'NL', + 'PL', + ) + ), + ), + 'category_other' => array( + 'AT', + 'BE', + 'CH', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'IT', + 'NL', + 'PL', + ), + 'category_additional' => array(), + ), array( 'id' => 'payfast', 'title' => __( 'PayFast', 'woocommerce' ), @@ -55,27 +312,10 @@ class DefaultPaymentGateways { 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/payfast.png', 'plugins' => array( 'woocommerce-payfast-gateway' ), 'is_visible' => array( - self::get_rules_for_countries( array( 'ZA', 'GH', 'NG' ) ), + self::get_rules_for_countries( array( 'ZA' ) ), self::get_rules_for_cbd( false ), ), - 'category_other' => array( 'ZA', 'GH', 'NG' ), - 'category_additional' => array(), - ), - array( - 'id' => 'stripe', - 'title' => __( ' Stripe', 'woocommerce' ), - 'content' => __( 'Accept debit and credit cards in 135+ currencies, methods such as Alipay, and one-touch checkout with Apple Pay.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/stripe.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/stripe.png', - 'plugins' => array( 'woocommerce-gateway-stripe' ), - 'is_visible' => array( - // https://stripe.com/global. - self::get_rules_for_countries( - array( 'AU', 'AT', 'BE', 'BG', 'BR', 'CA', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HK', 'IN', 'IE', 'IT', 'JP', 'LV', 'LT', 'LU', 'MY', 'MT', 'MX', 'NL', 'NZ', 'NO', 'PL', 'PT', 'RO', 'SG', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB', 'US', 'PR', 'HU', 'SL', 'ID', 'MY', 'SI', 'PR' ) - ), - self::get_rules_for_cbd( false ), - ), - 'category_other' => array( 'AU', 'AT', 'BE', 'BG', 'BR', 'CA', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HK', 'IN', 'IE', 'IT', 'JP', 'LV', 'LT', 'LU', 'MY', 'MT', 'MX', 'NL', 'NZ', 'NO', 'PL', 'PT', 'RO', 'SG', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB', 'US', 'PR', 'HU', 'SL', 'ID', 'MY', 'SI', 'PR' ), + 'category_other' => array( 'ZA' ), 'category_additional' => array(), ), array( @@ -93,62 +333,21 @@ class DefaultPaymentGateways { 'category_additional' => array(), ), array( - 'id' => 'kco', - 'title' => __( 'Klarna Checkout', 'woocommerce' ), - 'content' => __( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/klarna-black.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/klarna.png', - 'plugins' => array( 'klarna-checkout-for-woocommerce' ), + 'id' => 'payubiz', + 'title' => __( 'PayU for WooCommerce', 'woocommerce' ), + 'content' => __( 'Enable PayU’s exclusive plugin for WooCommerce to start accepting payments in 100+ payment methods available in India including credit cards, debit cards, UPI, & more!', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/payu.svg', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/payu.png', + 'plugins' => array( 'payu-india' ), 'is_visible' => array( - self::get_rules_for_countries( array( 'SE', 'FI', 'NO' ) ), - self::get_rules_for_cbd( false ), - ), - 'category_other' => array( 'SE', 'FI', 'NO' ), - 'category_additional' => array(), - ), - array( - 'id' => 'klarna_payments', - 'title' => __( 'Klarna Payments', 'woocommerce' ), - 'content' => __( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/klarna-black.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/klarna.png', - 'plugins' => array( 'klarna-payments-for-woocommerce' ), - 'is_visible' => array( - self::get_rules_for_countries( - array( 'DK', 'DE', 'AT', 'NL', 'CH', 'BE', 'SP', 'PL', 'FR', 'IT', 'GB', 'ES', 'FI', 'NO', 'SE', 'ES', 'FI', 'NO', 'SE' ) + (object) array( + 'type' => 'base_location_country', + 'value' => 'IN', + 'operation' => '=', ), self::get_rules_for_cbd( false ), ), - 'category_other' => array(), - 'category_additional' => array( 'DK', 'DE', 'AT', 'NL', 'CH', 'BE', 'SP', 'PL', 'FR', 'IT', 'GB', 'ES', 'FI', 'NO', 'SE', 'ES', 'FI', 'NO', 'SE' ), - ), - array( - 'id' => 'mollie_wc_gateway_banktransfer', - 'title' => __( 'Mollie', 'woocommerce' ), - 'content' => __( 'Effortless payments by Mollie: Offer global and local payment methods, get onboarded in minutes, and supported in your language.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/mollie.svg', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/mollie.png', - 'plugins' => array( 'mollie-payments-for-woocommerce' ), - 'is_visible' => array( - self::get_rules_for_countries( - array( 'FR', 'DE', 'GB', 'AT', 'CH', 'ES', 'IT', 'PL', 'FI', 'NL', 'BE' ) - ), - ), - 'category_other' => array( 'FR', 'DE', 'GB', 'AT', 'CH', 'ES', 'IT', 'PL', 'FI', 'NL', 'BE' ), - 'category_additional' => array(), - ), - array( - 'id' => 'woo-mercado-pago-custom', - 'title' => __( 'Mercado Pago Checkout Pro & Custom', 'woocommerce' ), - 'content' => __( 'Accept credit and debit cards, offline (cash or bank transfer) and logged-in payments with money in Mercado Pago. Safe and secure payments with the leading payment processor in LATAM.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/mercadopago.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/mercadopago.png', - 'plugins' => array( 'woocommerce-mercadopago' ), - 'is_visible' => array( - self::get_rules_for_countries( array( 'AR', 'BR', 'CL', 'CO', 'MX', 'PE', 'UY' ) ), - ), - 'is_local_partner' => true, - 'category_other' => array( 'AR', 'BR', 'CL', 'CO', 'MX', 'PE', 'UY' ), + 'category_other' => array( 'IN' ), 'category_additional' => array(), ), array( @@ -166,30 +365,304 @@ class DefaultPaymentGateways { ), self::get_rules_for_cbd( false ), ), - 'category_other' => array( 'US', 'CA', 'AT', 'BE', 'BG', 'HR', 'CH', 'CY', 'CZ', 'DK', 'EE', 'ES', 'FI', 'FR', 'DE', 'GB', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'SK', 'SL', 'SE', 'MX', 'BR', 'AR', 'CL', 'CO', 'EC', 'PE', 'UY', 'VE', 'AU', 'NZ', 'HK', 'JP', 'SG', 'CN', 'ID', 'ZA', 'NG', 'GH' ), - 'category_additional' => array( 'US', 'CA', 'AT', 'BE', 'BG', 'HR', 'CH', 'CY', 'CZ', 'DK', 'EE', 'ES', 'FI', 'FR', 'DE', 'GB', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'SK', 'SL', 'SE', 'MX', 'BR', 'AR', 'CL', 'CO', 'EC', 'PE', 'UY', 'VE', 'AU', 'NZ', 'HK', 'JP', 'SG', 'CN', 'ID', 'IN', 'ZA', 'NG', 'GH' ), + 'category_other' => array( + 'US', + 'CA', + 'MX', + 'BR', + 'AR', + 'CL', + 'CO', + 'EC', + 'PE', + 'UY', + 'VE', + 'AT', + 'BE', + 'BG', + 'HR', + 'CH', + 'CY', + 'CZ', + 'DK', + 'EE', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'GR', + 'HU', + 'IE', + 'IT', + 'LV', + 'LT', + 'LU', + 'MT', + 'NL', + 'NO', + 'PL', + 'PT', + 'RO', + 'SK', + 'SL', + 'SE', + 'AU', + 'NZ', + 'HK', + 'JP', + 'SG', + 'CN', + 'ID', + 'IN', + ), + 'category_additional' => array( + 'US', + 'CA', + 'ZA', + 'NG', + 'GH', + 'EC', + 'VE', + 'AR', + 'CL', + 'CO', + 'PE', + 'UY', + 'MX', + 'BR', + 'AT', + 'BE', + 'BG', + 'HR', + 'CH', + 'CY', + 'CZ', + 'DK', + 'EE', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'GR', + 'HU', + 'IE', + 'IT', + 'LV', + 'LT', + 'LU', + 'MT', + 'NL', + 'NO', + 'PL', + 'PT', + 'RO', + 'SK', + 'SL', + 'SE', + 'AU', + 'NZ', + 'HK', + 'JP', + 'SG', + 'CN', + 'ID', + ), ), array( - 'id' => 'cod', - 'title' => __( 'Cash on delivery', 'woocommerce' ), - 'content' => __( 'Take payments in cash upon delivery.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/cod.svg', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/cod.png', - 'is_visible' => array( + 'id' => 'razorpay', + 'title' => __( 'Razorpay', 'woocommerce' ), + 'content' => __( 'The official Razorpay extension for WooCommerce allows you to accept credit cards, debit cards, netbanking, wallet, and UPI payments.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/razorpay.svg', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/razorpay.png', + 'plugins' => array( 'woo-razorpay' ), + 'is_visible' => array( + (object) array( + 'type' => 'base_location_country', + 'value' => 'IN', + 'operation' => '=', + ), self::get_rules_for_cbd( false ), ), - 'is_offline' => true, + 'category_other' => array( 'IN' ), + 'category_additional' => array(), ), array( - 'id' => 'bacs', - 'title' => __( 'Direct bank transfer', 'woocommerce' ), - 'content' => __( 'Take payments via bank transfer.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/bacs.svg', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/bacs.png', - 'is_visible' => array( + 'id' => 'square_credit_card', + 'title' => __( 'Square', 'woocommerce' ), + 'content' => __( 'Securely accept credit and debit cards with one low rate, no surprise fees (custom rates available). Sell online and in store and track sales and inventory in one place.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/square-black.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/square.png', + 'plugins' => array( 'woocommerce-square' ), + 'is_visible' => array( + (object) array( + 'type' => 'or', + 'operands' => (object) array( + array( + self::get_rules_for_countries( array( 'US' ) ), + self::get_rules_for_cbd( true ), + ), + array( + self::get_rules_for_countries( + array( + 'US', + 'CA', + 'IE', + 'ES', + 'FR', + 'GB', + 'AU', + 'JP', + ) + ), + self::get_rules_for_selling_venues( array( 'brick-mortar', 'brick-mortar-other' ) ), + ), + ), + ), + ), + 'category_other' => array( + 'US', + 'CA', + 'IE', + 'ES', + 'FR', + 'GB', + 'AU', + 'JP', + ), + 'category_additional' => array(), + ), + array( + 'id' => 'stripe', + 'title' => __( ' Stripe', 'woocommerce' ), + 'content' => __( 'Accept debit and credit cards in 135+ currencies, methods such as Alipay, and one-touch checkout with Apple Pay.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/stripe.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/stripe.png', + 'plugins' => array( 'woocommerce-gateway-stripe' ), + 'is_visible' => array( + // https://stripe.com/global. + self::get_rules_for_countries( + array( + 'US', + 'CA', + 'MX', + 'BR', + 'AT', + 'BE', + 'BG', + 'CH', + 'CY', + 'CZ', + 'DK', + 'EE', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'GR', + 'HU', + 'IE', + 'IT', + 'LV', + 'LT', + 'LU', + 'MT', + 'NL', + 'NO', + 'PL', + 'PT', + 'RO', + 'SK', + 'SL', + 'SE', + 'AU', + 'NZ', + 'HK', + 'JP', + 'SG', + 'ID', + 'IN', + ) + ), self::get_rules_for_cbd( false ), ), - 'is_offline' => true, + 'category_other' => array( + 'US', + 'CA', + 'MX', + 'BR', + 'AT', + 'BE', + 'BG', + 'CH', + 'CY', + 'CZ', + 'DK', + 'EE', + 'ES', + 'FI', + 'FR', + 'DE', + 'GB', + 'GR', + 'HU', + 'IE', + 'IT', + 'LV', + 'LT', + 'LU', + 'MT', + 'NL', + 'NO', + 'PL', + 'PT', + 'RO', + 'SK', + 'SL', + 'SE', + 'AU', + 'NZ', + 'HK', + 'JP', + 'SG', + 'ID', + 'IN', + ), + 'category_additional' => array(), + ), + array( + 'id' => 'woo-mercado-pago-custom', + 'title' => __( 'Mercado Pago Checkout Pro & Custom', 'woocommerce' ), + 'content' => __( 'Accept credit and debit cards, offline (cash or bank transfer) and logged-in payments with money in Mercado Pago. Safe and secure payments with the leading payment processor in LATAM.', 'woocommerce' ), + 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/mercadopago.png', + 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/mercadopago.png', + 'plugins' => array( 'woocommerce-mercadopago' ), + 'is_visible' => array( + self::get_rules_for_countries( + array( + 'AR', + 'CL', + 'CO', + 'PE', + 'UY', + 'MX', + 'BR', + ) + ), + ), + 'is_local_partner' => true, + 'category_other' => array( + 'AR', + 'CL', + 'CO', + 'PE', + 'UY', + 'MX', + 'BR', + ), + 'category_additional' => array(), ), // This is for backwards compatibility only (WC < 5.10.0-dev or WCA < 2.9.0-dev). array( @@ -303,121 +776,6 @@ class DefaultPaymentGateways { ), ), ), - array( - 'id' => 'razorpay', - 'title' => __( 'Razorpay', 'woocommerce' ), - 'content' => __( 'The official Razorpay extension for WooCommerce allows you to accept credit cards, debit cards, netbanking, wallet, and UPI payments.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/razorpay.svg', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/razorpay.png', - 'plugins' => array( 'woo-razorpay' ), - 'is_visible' => array( - (object) array( - 'type' => 'base_location_country', - 'value' => 'IN', - 'operation' => '=', - ), - self::get_rules_for_cbd( false ), - ), - 'category_other' => array( 'IN' ), - 'category_additional' => array(), - ), - array( - 'id' => 'payubiz', - 'title' => __( 'PayU for WooCommerce', 'woocommerce' ), - 'content' => __( 'Enable PayU’s exclusive plugin for WooCommerce to start accepting payments in 100+ payment methods available in India including credit cards, debit cards, UPI, & more!', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/payu.svg', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/payu.png', - 'plugins' => array( 'payu-india' ), - 'is_visible' => array( - (object) array( - 'type' => 'base_location_country', - 'value' => 'IN', - 'operation' => '=', - ), - self::get_rules_for_cbd( false ), - ), - 'category_other' => array( 'IN' ), - 'category_additional' => array(), - ), - array( - 'id' => 'eway', - 'title' => __( 'Eway', 'woocommerce' ), - 'content' => __( 'The Eway extension for WooCommerce allows you to take credit card payments directly on your store without redirecting your customers to a third party site to make payment.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/onboarding/eway.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/eway.png', - 'plugins' => array( 'woocommerce-gateway-eway' ), - 'is_visible' => array( - self::get_rules_for_countries( array( 'AU', 'NZ' ) ), - self::get_rules_for_cbd( false ), - ), - 'category_other' => array( 'AU', 'NZ' ), - 'category_additional' => array(), - ), - array( - 'id' => 'square_credit_card', - 'title' => __( 'Square', 'woocommerce' ), - 'content' => __( 'Securely accept credit and debit cards with one low rate, no surprise fees (custom rates available). Sell online and in store and track sales and inventory in one place.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/square-black.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/square.png', - 'plugins' => array( 'woocommerce-square' ), - 'is_visible' => array( - (object) array( - 'type' => 'or', - 'operands' => (object) array( - array( - self::get_rules_for_countries( array( 'US' ) ), - self::get_rules_for_cbd( true ), - ), - array( - self::get_rules_for_countries( array( 'US', 'CA', 'JP', 'GB', 'AU', 'IE', 'FR', 'ES', 'FI' ) ), - self::get_rules_for_selling_venues( array( 'brick-mortar', 'brick-mortar-other' ) ), - ), - ), - ), - ), - 'category_other' => array( 'US', 'CA', 'JP', 'GB', 'AU', 'IE', 'FR', 'ES', 'FI' ), - 'category_additional' => array(), - ), - array( - 'id' => 'afterpay', - 'title' => __( 'Afterpay', 'woocommerce' ), - 'content' => __( 'Afterpay allows customers to receive products immediately and pay for purchases over four installments, always interest-free.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/afterpay.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/afterpay.png', - 'plugins' => array( 'afterpay-gateway-for-woocommerce' ), - 'is_visible' => array( - self::get_rules_for_countries( array( 'US', 'CA' ) ), - ), - 'category_other' => array(), - 'category_additional' => array( 'US', 'CA' ), - ), - array( - 'id' => 'amazon_payments_advanced', - 'title' => __( 'Amazon Pay', 'woocommerce' ), - 'content' => __( 'Enable a familiar, fast checkout for hundreds of millions of active Amazon customers globally.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/amazonpay.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/amazonpay.png', - 'plugins' => array( 'woocommerce-gateway-amazon-payments-advanced' ), - 'is_visible' => array( - self::get_rules_for_countries( array( 'US', 'GB', 'JP', 'AT', 'BE', 'CY', 'DK', 'ES', 'FR', 'DE', 'HU', 'IE', 'IT', 'LU', 'NL', 'PT', 'SL', 'SE' ) ), - ), - 'category_other' => array(), - 'category_additional' => array( 'US', 'GB', 'JP', 'AT', 'BE', 'CY', 'DK', 'ES', 'FR', 'DE', 'HU', 'IE', 'IT', 'LU', 'NL', 'PT', 'SL', 'SE' ), - ), - array( - 'id' => 'affirm', - 'title' => __( 'Affirm', 'woocommerce' ), - 'content' => __( 'Affirm’s tailored Buy Now Pay Later programs remove price as a barrier, turning browsers into buyers, increasing average order value, and expanding your customer base.', 'woocommerce' ), - 'image' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/affirm.png', - 'image_72x72' => WC_ADMIN_IMAGES_FOLDER_URL . '/payment_methods/72x72/affirm.png', - 'plugins' => array(), - 'external_link' => 'https://woocommerce.com/products/woocommerce-gateway-affirm', - 'is_visible' => array( - self::get_rules_for_countries( array( 'US', 'CA' ) ), - ), - 'category_other' => array(), - 'category_additional' => array( 'US', 'CA' ), - ), ); foreach ( $payment_gateways as $index => $payment_gateway ) { @@ -433,7 +791,7 @@ class DefaultPaymentGateways { * @return array Array of countries. */ public static function get_wcpay_countries() { - return array( 'US', 'PR', 'AU', 'CA', 'DE', 'ES', 'FR', 'GB', 'IE', 'IT', 'NZ', 'AT', 'BE', 'NL', 'PL', 'PT', 'CH', 'HK', 'SG' ); + return array( 'US', 'PR', 'AU', 'CA', 'CY', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'IE', 'IT', 'LU', 'LT', 'LV', 'NO', 'NZ', 'MT', 'AT', 'BE', 'NL', 'PL', 'PT', 'CH', 'HK', 'SI', 'SK', 'SG' ); } /** diff --git a/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/DefaultShippingPartners.php b/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/DefaultShippingPartners.php new file mode 100644 index 00000000000..866d156482c --- /dev/null +++ b/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/DefaultShippingPartners.php @@ -0,0 +1,250 @@ +plugin_url() . '/assets/images/shipping_partners/'; + $column_layout_features = array( + array( + 'icon' => $asset_base_url . 'timer.svg', + 'title' => __( 'Save time', 'woocommerce' ), + 'description' => __( + 'Automatically import order information to quickly print your labels.', + 'woocommerce' + ), + ), + array( + 'icon' => $asset_base_url . 'discount.svg', + 'title' => __( 'Save money', 'woocommerce' ), + 'description' => __( + 'Shop for the best shipping rates, and access pre-negotiated discounted rates.', + 'woocommerce' + ), + ), + array( + 'icon' => $asset_base_url . 'star.svg', + 'title' => __( 'Wow your shoppers', 'woocommerce' ), + 'description' => __( + 'Keep your customers informed with tracking notifications.', + 'woocommerce' + ), + ), + ); + + $check_icon = $asset_base_url . 'check.svg'; + + return array( + array( + 'name' => 'ShipStation', + 'slug' => 'woocommerce-shipstation-integration', + 'description' => __( 'Powerful yet easy-to-use solution:', 'woocommerce' ), + 'layout_column' => array( + 'image' => $asset_base_url . 'shipstation-column.svg', + 'features' => $column_layout_features, + ), + 'layout_row' => array( + 'image' => $asset_base_url . 'shipstation-row.svg', + 'features' => array( + array( + 'icon' => $check_icon, + 'description' => __( + 'Print labels from Royal Mail, Parcel Force, DPD, and many more', + 'woocommerce' + ), + ), + array( + 'icon' => $check_icon, + 'description' => __( + 'Shop for the best rates, in real-time', + 'woocommerce' + ), + ), + array( + 'icon' => $check_icon, + 'description' => __( 'Connect selling channels easily', 'woocommerce' ), + ), + array( + 'icon' => $check_icon, + 'description' => __( 'Advance automated workflows', 'woocommerce' ), + ), + array( + 'icon' => $check_icon, + 'description' => __( '30-days free trial', 'woocommerce' ), + ), + ), + ), + 'learn_more_link' => 'https://wordpress.org/plugins/woocommerce-shipstation-integration/', + 'is_visible' => array( + self::get_rules_for_countries( array( 'AU', 'CA', 'GB' ) ), + ), + 'available_layouts' => array( 'row', 'column' ), + ), + array( + 'name' => 'Skydropx', + 'slug' => 'skydropx-cotizador-y-envios', + 'layout_column' => array( + 'image' => $asset_base_url . 'skydropx-column.svg', + 'features' => $column_layout_features, + ), + 'description' => '', + 'learn_more_link' => 'https://wordpress.org/plugins/skydropx-cotizador-y-envios/', + 'is_visible' => array( + self::get_rules_for_countries( array( 'MX', 'CO' ) ), + ), + 'available_layouts' => array( 'column' ), + ), + array( + 'name' => 'Envia', + 'slug' => '', + 'description' => '', + 'layout_column' => array( + 'image' => $asset_base_url . 'envia-column.svg', + 'features' => $column_layout_features, + ), + 'learn_more_link' => 'https://woocommerce.com/products/envia-shipping-and-fulfillment/', + 'is_visible' => array( + self::get_rules_for_countries( array( 'CL', 'AR', 'PE', 'BR', 'UY', 'GT' ) ), + ), + 'available_layouts' => array( 'column' ), + ), + array( + 'name' => 'Sendcloud', + 'slug' => 'sendcloud-shipping', + 'description' => __( 'All-in-one shipping tool:', 'woocommerce' ), + 'layout_column' => array( + 'image' => $asset_base_url . 'sendcloud-column.svg', + 'features' => $column_layout_features, + ), + 'layout_row' => array( + 'image' => $asset_base_url . 'sendcloud-row.svg', + 'features' => array( + array( + 'icon' => $check_icon, + 'description' => __( 'Print labels from 80+ carriers', 'woocommerce' ), + ), + array( + 'icon' => $check_icon, + 'description' => __( + 'Process orders in just a few clicks', + 'woocommerce' + ), + ), + array( + 'icon' => $check_icon, + 'description' => __( 'Customize checkout options', 'woocommerce' ), + ), + + array( + 'icon' => $check_icon, + 'description' => __( 'Self-service tracking & returns', 'woocommerce' ), + ), + array( + 'icon' => $check_icon, + 'description' => __( 'Start with a free plan', 'woocommerce' ), + ), + ), + ), + 'learn_more_link' => 'https://wordpress.org/plugins/sendcloud-shipping/', + 'is_visible' => array( + self::get_rules_for_countries( array( 'NL', 'AT', 'BE', 'FR', 'DE', 'ES', 'GB', 'IT' ) ), + ), + 'available_layouts' => array( 'row', 'column' ), + ), + array( + 'name' => 'Packlink', + 'slug' => 'packlink-pro-shipping', + 'description' => __( 'Optimize your full shipping process:', 'woocommerce' ), + 'layout_column' => array( + 'image' => $asset_base_url . 'packlink-column.svg', + 'features' => $column_layout_features, + ), + 'layout_row' => array( + 'image' => $asset_base_url . 'packlink-row.svg', + 'features' => array( + array( + 'icon' => $check_icon, + 'description' => __( + 'Automated, real-time order import', + 'woocommerce' + ), + ), + array( + 'icon' => $check_icon, + 'description' => __( + 'Direct access to leading carriers', + 'woocommerce' + ), + ), + array( + 'icon' => $check_icon, + 'description' => __( + 'Access competitive shipping prices', + 'woocommerce' + ), + ), + array( + 'icon' => $check_icon, + 'description' => __( 'Quickly bulk print labels', 'woocommerce' ), + ), + array( + 'icon' => $check_icon, + 'description' => __( 'Free shipping platform', 'woocommerce' ), + ), + ), + ), + 'learn_more_link' => 'https://wordpress.org/plugins/packlink-pro-shipping/', + 'is_visible' => array( + self::get_rules_for_countries( array( 'FR', 'DE', 'ES', 'IT' ) ), + ), + 'available_layouts' => array( 'row', 'column' ), + ), + array( + 'title' => 'WooCommerce Shipping', + 'slug' => 'woocommerce-services', + 'description' => __( 'Save time and money by printing your shipping labels right from your computer with WooCommerce Shipping. Try WooCommerce Shipping for free.', 'woocommerce' ), + 'layout_column' => array( + 'image' => $asset_base_url . 'wcs-column.svg', + 'features' => $column_layout_features, + ), + 'learn_more_link' => 'https://woocommerce.com/products/shipping/', + 'is_visible' => array( + self::get_rules_for_countries( array( 'US' ) ), + ), + 'available_layouts' => array( 'column' ), + ), + ); + } + + /** + * Get rules that match the store base location to one of the provided countries. + * + * @param array $countries Array of countries to match. + * @return object Rules to match. + */ + public static function get_rules_for_countries( $countries ) { + $rules = array(); + + foreach ( $countries as $country ) { + $rules[] = (object) array( + 'type' => 'base_location_country', + 'value' => $country, + 'operation' => '=', + ); + } + + return (object) array( + 'type' => 'or', + 'operands' => $rules, + ); + } +} diff --git a/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/ShippingPartnerSuggestions.php b/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/ShippingPartnerSuggestions.php new file mode 100644 index 00000000000..dd31e22d5ea --- /dev/null +++ b/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/ShippingPartnerSuggestions.php @@ -0,0 +1,70 @@ +is_visible ) ) { + $is_visible = $rule_evaluator->evaluate( $spec->is_visible ); + if ( $is_visible ) { + $spec->is_visible = true; + $suggestions[] = $spec; + } + } + } + + return $suggestions; + } + + /** + * Get specs or fetch remotely if they don't exist. + */ + public static function get_specs_from_datasource() { + if ( 'no' === get_option( 'woocommerce_show_marketplace_suggestions', 'yes' ) ) { + /** + * It can be used to modify shipping partner suggestions spec. + * + * @since 7.4.1 + */ + return apply_filters( 'woocommerce_admin_shipping_partner_suggestions_specs', DefaultShippingPartners::get_all() ); + } + $specs = ShippingPartnerSuggestionsDataSourcePoller::get_instance()->get_specs_from_data_sources(); + + // Fetch specs if they don't yet exist. + if ( false === $specs || ! is_array( $specs ) || 0 === count( $specs ) ) { + /** + * It can be used to modify shipping partner suggestions spec. + * + * @since 7.4.1 + */ + return apply_filters( 'woocommerce_admin_shipping_partner_suggestions_specs', DefaultShippingPartners::get_all() ); + } + + /** + * It can be used to modify shipping partner suggestions spec. + * + * @since 7.4.1 + */ + return apply_filters( 'woocommerce_admin_shipping_partner_suggestions_specs', $specs ); + } +} diff --git a/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/ShippingPartnerSuggestionsDataSourcePoller.php b/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/ShippingPartnerSuggestionsDataSourcePoller.php new file mode 100644 index 00000000000..04c2708c523 --- /dev/null +++ b/plugins/woocommerce/src/Admin/Features/ShippingPartnerSuggestions/ShippingPartnerSuggestionsDataSourcePoller.php @@ -0,0 +1,40 @@ +queue()->schedule_single( time(), 'woocommerce_run_on_woocommerce_admin_updated', diff --git a/plugins/woocommerce/src/Caches/OrderCache.php b/plugins/woocommerce/src/Caches/OrderCache.php index 6f49fa308dd..fed5b0be0d7 100644 --- a/plugins/woocommerce/src/Caches/OrderCache.php +++ b/plugins/woocommerce/src/Caches/OrderCache.php @@ -2,6 +2,7 @@ namespace Automattic\WooCommerce\Caches; +use Automattic\WooCommerce\Caching\CacheException; use Automattic\WooCommerce\Caching\ObjectCache; /** diff --git a/plugins/woocommerce/src/Internal/Admin/Events.php b/plugins/woocommerce/src/Internal/Admin/Events.php index edb5e13a7b7..e745fe7c86d 100644 --- a/plugins/woocommerce/src/Internal/Admin/Events.php +++ b/plugins/woocommerce/src/Internal/Admin/Events.php @@ -44,6 +44,8 @@ use Automattic\WooCommerce\Internal\Admin\Notes\WooCommerceSubscriptions; use Automattic\WooCommerce\Internal\Admin\Notes\WooSubscriptionsNotes; use Automattic\WooCommerce\Internal\Admin\Schedulers\MailchimpScheduler; use Automattic\WooCommerce\Admin\Notes\Note; +use Automattic\WooCommerce\Admin\Features\PaymentGatewaySuggestions\PaymentGatewaySuggestionsDataSourcePoller; +use Automattic\WooCommerce\Internal\Admin\RemoteFreeExtensions\RemoteFreeExtensionsDataSourcePoller; /** * Events Class. @@ -143,6 +145,7 @@ class Events { $this->possibly_add_notes(); $this->possibly_delete_notes(); $this->possibly_update_notes(); + $this->possibly_refresh_data_source_pollers(); if ( $this->is_remote_inbox_notifications_enabled() ) { DataSourcePoller::get_instance()->read_specs_from_data_sources(); @@ -250,4 +253,21 @@ class Events { // All checks have passed. return true; } + + /** + * Refresh transient for the following DataSourcePollers on wc_admin_daily cron job. + * - PaymentGatewaySuggestionsDataSourcePoller + * - RemoteFreeExtensionsDataSourcePoller + */ + protected function possibly_refresh_data_source_pollers() { + $completed_tasks = get_option( 'woocommerce_task_list_tracked_completed_tasks' ); + + if ( ! in_array( 'payments', $completed_tasks, true ) && ! in_array( 'woocommerce-payments', $completed_tasks, true ) ) { + PaymentGatewaySuggestionsDataSourcePoller::get_instance()->read_specs_from_data_sources(); + } + + if ( ! in_array( 'store_details', $completed_tasks, true ) && ! in_array( 'marketing', $completed_tasks, true ) ) { + RemoteFreeExtensionsDataSourcePoller::get_instance()->read_specs_from_data_sources(); + } + } } diff --git a/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php b/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php index f6b591dd5de..99055062238 100644 --- a/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php +++ b/plugins/woocommerce/src/Internal/Admin/RemoteFreeExtensions/DefaultFreeExtensions.php @@ -284,6 +284,66 @@ class DefaultFreeExtensions { 'value' => 'SG', 'operation' => '=', ], + [ + 'type' => 'base_location_country', + 'value' => 'CY', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'DK', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'EE', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'FI', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'GR', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'LU', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'LT', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'LV', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'NO', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'MT', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'SI', + 'operation' => '=', + ], + [ + 'type' => 'base_location_country', + 'value' => 'SK', + 'operation' => '=', + ], ], ], DefaultPaymentGateways::get_rules_for_cbd( false ), diff --git a/plugins/woocommerce/src/Internal/Admin/Schedulers/CustomersScheduler.php b/plugins/woocommerce/src/Internal/Admin/Schedulers/CustomersScheduler.php index 4b8533d3efc..05bba2f5802 100644 --- a/plugins/woocommerce/src/Internal/Admin/Schedulers/CustomersScheduler.php +++ b/plugins/woocommerce/src/Internal/Admin/Schedulers/CustomersScheduler.php @@ -27,13 +27,6 @@ class CustomersScheduler extends ImportScheduler { * @internal */ public static function init() { - add_action( 'woocommerce_new_customer', array( __CLASS__, 'schedule_import' ) ); - add_action( 'woocommerce_update_customer', array( __CLASS__, 'schedule_import' ) ); - add_action( 'updated_user_meta', array( __CLASS__, 'schedule_import_via_last_active' ), 10, 3 ); - add_action( 'woocommerce_privacy_remove_order_personal_data', array( __CLASS__, 'schedule_anonymize' ) ); - add_action( 'delete_user', array( __CLASS__, 'schedule_user_delete' ) ); - add_action( 'remove_user_from_blog', array( __CLASS__, 'schedule_user_delete' ) ); - CustomersDataStore::init(); parent::init(); } @@ -47,8 +40,6 @@ class CustomersScheduler extends ImportScheduler { public static function get_dependencies() { return array( 'delete_batch_init' => OrdersScheduler::get_action( 'delete_batch_init' ), - 'anonymize' => self::get_action( 'import' ), - 'delete_user' => self::get_action( 'import' ), ); } @@ -120,74 +111,6 @@ class CustomersScheduler extends ImportScheduler { return $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}wc_customer_lookup" ); } - /** - * Get all available scheduling actions. - * Used to determine action hook names and clear events. - * - * @internal - * @return array - */ - public static function get_scheduler_actions() { - $actions = parent::get_scheduler_actions(); - $actions['anonymize'] = 'wc-admin_anonymize_' . static::$name; - $actions['delete_user'] = 'wc-admin_delete_user_' . static::$name; - return $actions; - } - - /** - * Schedule import. - * - * @internal - * @param int $user_id User ID. - * @return void - */ - public static function schedule_import( $user_id ) { - self::schedule_action( 'import', array( $user_id ) ); - } - - /** - * Schedule an import if the "last active" meta value was changed. - * Function expects to be hooked into the `updated_user_meta` action. - * - * @internal - * @param int $meta_id ID of updated metadata entry. - * @param int $user_id ID of the user being updated. - * @param string $meta_key Meta key being updated. - */ - public static function schedule_import_via_last_active( $meta_id, $user_id, $meta_key ) { - if ( 'wc_last_active' === $meta_key ) { - self::schedule_import( $user_id ); - } - } - - /** - * Schedule an action to anonymize a single Order. - * - * @internal - * @param WC_Order $order Order object. - * @return void - */ - public static function schedule_anonymize( $order ) { - if ( is_a( $order, 'WC_Order' ) ) { - // Postpone until any pending updates are completed. - self::schedule_action( 'anonymize', array( $order->get_id() ) ); - } - } - - /** - * Schedule an action to delete a single User. - * - * @internal - * @param int $user_id User ID. - * @return void - */ - public static function schedule_user_delete( $user_id ) { - if ( (int) $user_id > 0 && ! doing_action( 'wp_uninitialize_site' ) ) { - // Postpone until any pending updates are completed. - self::schedule_action( 'delete_user', array( $user_id ) ); - } - } - /** * Imports a single customer. * @@ -220,68 +143,4 @@ class CustomersScheduler extends ImportScheduler { CustomersDataStore::delete_customer( $customer_id ); } } - - /** - * Anonymize the customer data for a single order. - * - * @internal - * @param int $order_id Order id. - * @return void - */ - public static function anonymize( $order_id ) { - global $wpdb; - - $customer_id = $wpdb->get_var( - $wpdb->prepare( "SELECT customer_id FROM {$wpdb->prefix}wc_order_stats WHERE order_id = %d", $order_id ) - ); - - if ( ! $customer_id ) { - return; - } - - // Long form query because $wpdb->update rejects [deleted]. - $deleted_text = __( '[deleted]', 'woocommerce' ); - $updated = $wpdb->query( - $wpdb->prepare( - "UPDATE {$wpdb->prefix}wc_customer_lookup - SET - user_id = NULL, - username = %s, - first_name = %s, - last_name = %s, - email = %s, - country = '', - postcode = %s, - city = %s, - state = %s - WHERE - customer_id = %d", - array( - $deleted_text, - $deleted_text, - $deleted_text, - 'deleted@site.invalid', - $deleted_text, - $deleted_text, - $deleted_text, - $customer_id, - ) - ) - ); - // If the customer row was anonymized, flush the cache. - if ( $updated ) { - ReportsCache::invalidate(); - } - } - - /** - * Delete the customer data for a single user. - * - * @internal - * @param int $user_id User ID. - * @return void - */ - public static function delete_user( $user_id ) { - CustomersDataStore::delete_customer_by_user_id( $user_id ); - } } diff --git a/plugins/woocommerce/src/Internal/Admin/Translations.php b/plugins/woocommerce/src/Internal/Admin/Translations.php index cbbde4d5597..cbd6004f3a7 100644 --- a/plugins/woocommerce/src/Internal/Admin/Translations.php +++ b/plugins/woocommerce/src/Internal/Admin/Translations.php @@ -59,28 +59,16 @@ class Translations { } /** - * Find and combine translation chunk files. + * Combines data from translation chunk files based on officially downloaded file format. * - * Only targets files that aren't represented by a registered script (e.g. not passed to wp_register_script()). - * - * @param string $lang_dir Path to language files. - * @param string $domain Text domain. - * @param string $locale Locale being retrieved. + * @param array $json_i18n_filenames List of JSON chunk files. * @return array Combined translation chunk data. */ - private function get_translation_chunk_data( $lang_dir, $domain, $locale ) { - // So long as this function is called during the 'upgrader_process_complete' action, + private function combine_official_translation_chunks( $json_i18n_filenames ) { // the filesystem object should be hooked up. global $wp_filesystem; - - // Grab all JSON files in the current language pack. - $json_i18n_filenames = glob( $lang_dir . $domain . '-' . $locale . '-*.json' ); $combined_translation_data = array(); - if ( false === $json_i18n_filenames ) { - return $combined_translation_data; - } - foreach ( $json_i18n_filenames as $json_filename ) { if ( ! $wp_filesystem->is_readable( $json_filename ) ) { continue; @@ -93,10 +81,6 @@ class Translations { continue; } - if ( ! isset( $chunk_data['comment']['reference'] ) ) { - continue; - } - $reference_file = $chunk_data['comment']['reference']; // Only combine "app" files (not scripts registered with WP). @@ -121,10 +105,107 @@ class Translations { // Remove inaccurate reference comment. unset( $combined_translation_data['comment'] ); - return $combined_translation_data; } + /** + * Combines data from translation chunk files based on user-generated file formats, + * such as wp-cli tool or Loco Translate plugin. + * + * @param array $json_i18n_filenames List of JSON chunk files. + * @return array Combined translation chunk data. + */ + private function combine_user_translation_chunks( $json_i18n_filenames ) { + // the filesystem object should be hooked up. + global $wp_filesystem; + $combined_translation_data = array(); + + foreach ( $json_i18n_filenames as $json_filename ) { + if ( ! $wp_filesystem->is_readable( $json_filename ) ) { + continue; + } + + $file_contents = $wp_filesystem->get_contents( $json_filename ); + $chunk_data = \json_decode( $file_contents, true ); + + if ( empty( $chunk_data ) ) { + continue; + } + + $reference_file = $chunk_data['source']; + + // Only combine "app" files (not scripts registered with WP). + if ( + false === strpos( $reference_file, WC_ADMIN_DIST_JS_FOLDER . 'app/index.js' ) && + false === strpos( $reference_file, WC_ADMIN_DIST_JS_FOLDER . 'chunks/' ) + ) { + continue; + } + + if ( empty( $combined_translation_data ) ) { + // Use the first translation file as the base structure. + $combined_translation_data = $chunk_data; + } else { + // Combine all messages from all chunk files. + $combined_translation_data['locale_data']['woocommerce'] = array_merge( + $combined_translation_data['locale_data']['woocommerce'], + $chunk_data['locale_data']['woocommerce'] + ); + } + } + + // Remove inaccurate reference comment. + unset( $combined_translation_data['source'] ); + return $combined_translation_data; + } + + /** + * Find and combine translation chunk files. + * + * Only targets files that aren't represented by a registered script (e.g. not passed to wp_register_script()). + * + * @param string $lang_dir Path to language files. + * @param string $domain Text domain. + * @param string $locale Locale being retrieved. + * @return array Combined translation chunk data. + */ + private function get_translation_chunk_data( $lang_dir, $domain, $locale ) { + // So long as this function is called during the 'upgrader_process_complete' action, + // the filesystem object should be hooked up. + global $wp_filesystem; + + // Grab all JSON files in the current language pack. + $json_i18n_filenames = glob( $lang_dir . $domain . '-' . $locale . '-*.json' ); + $combined_translation_data = array(); + + if ( false === $json_i18n_filenames ) { + return $combined_translation_data; + } + + // Use first JSON file to determine file format. This check is required due to + // file format difference between official language files and user translated files. + $format_determine_file = reset( $json_i18n_filenames ); + + if ( ! $wp_filesystem->is_readable( $format_determine_file ) ) { + return $combined_translation_data; + } + + $file_contents = $wp_filesystem->get_contents( $format_determine_file ); + $format_determine_data = \json_decode( $file_contents, true ); + + if ( empty( $format_determine_data ) ) { + return $combined_translation_data; + } + + if ( isset( $format_determine_data['comment'] ) ) { + return $this->combine_official_translation_chunks( $json_i18n_filenames ); + } elseif ( isset( $format_determine_data['source'] ) ) { + return $this->combine_user_translation_chunks( $json_i18n_filenames ); + } else { + return $combined_translation_data; + } + } + /** * Combine and save translations for a specific locale. * diff --git a/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php b/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php index f78db3c4b5a..72dda5adbec 100644 --- a/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php +++ b/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php @@ -181,6 +181,8 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements /** * Get the names of all the tables involved in the custom orders table feature. * + * See also : get_all_table_names_with_id. + * * @return string[] */ public function get_all_table_names() { @@ -192,6 +194,22 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements ); } + /** + * Similar to get_all_table_names, but also returns the table name along with the items table. + * + * @return array Names of the tables. + */ + public static function get_all_table_names_with_id() { + global $wpdb; + return array( + 'orders' => self::get_orders_table_name(), + 'addresses' => self::get_addresses_table_name(), + 'operational_data' => self::get_operational_data_table_name(), + 'meta' => self::get_meta_table_name(), + 'items' => $wpdb->prefix . 'woocommerce_order_items', + ); + } + /** * Table column to WC_Order mapping for wc_orders table. * @@ -555,7 +573,8 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements * @return bool Whether permissions are granted. */ public function get_download_permissions_granted( $order ) { - $order = is_int( $order ) ? wc_get_order( $order ) : $order; + $order_id = is_int( $order ) ? $order : $order->get_id(); + $order = wc_get_order( $order_id ); return $order->get_download_permissions_granted(); } @@ -581,7 +600,8 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements * @return bool Whether sales are recorded. */ public function get_recorded_sales( $order ) { - $order = is_int( $order ) ? wc_get_order( $order ) : $order; + $order_id = is_int( $order ) ? $order : $order->get_id(); + $order = wc_get_order( $order_id ); return $order->get_recorded_sales(); } @@ -607,7 +627,8 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements * @return bool Whether coupon counts were updated. */ public function get_recorded_coupon_usage_counts( $order ) { - $order = is_int( $order ) ? wc_get_order( $order ) : $order; + $order_id = is_int( $order ) ? $order : $order->get_id(); + $order = wc_get_order( $order_id ); return $order->get_recorded_coupon_usage_counts(); } @@ -633,7 +654,8 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements * @return bool Whether email is sent. */ public function get_email_sent( $order ) { - $order = is_int( $order ) ? wc_get_order( $order ) : $order; + $order_id = is_int( $order ) ? $order : $order->get_id(); + $order = wc_get_order( $order_id ); return $order->get_new_order_email_sent(); } @@ -659,8 +681,7 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements * @return bool Whether email was sent. */ public function get_new_order_email_sent( $order ) { - $order = is_int( $order ) ? wc_get_order( $order ) : $order; - return $order->get_new_order_email_sent(); + return $this->get_email_sent( $order ); } /** @@ -685,7 +706,8 @@ class OrdersTableDataStore extends \Abstract_WC_Order_Data_Store_CPT implements * @return bool Whether stock was reduced. */ public function get_stock_reduced( $order ) { - $order = is_int( $order ) ? wc_get_order( $order ) : $order; + $order_id = is_int( $order ) ? $order : $order->get_id(); + $order = wc_get_order( $order_id ); return $order->get_order_stock_reduced(); } @@ -1768,9 +1790,14 @@ FROM $order_meta_table $order->set_id( 0 ); - // Only delete post data if the posts table is authoritative and synchronization is enabled. + /** We can delete the post data if: + * 1. The HPOS table is authoritative and synchronization is enabled. + * 2. The post record is of type `shop_order_placehold`, since this is created by the HPOS in the first place. + * + * In other words, we do not delete the post record when HPOS table is authoritative and synchronization is disabled but post record is a full record and not just a placeholder, because it implies that the order was created before HPOS was enabled. + */ $data_synchronizer = wc_get_container()->get( DataSynchronizer::class ); - if ( $data_synchronizer->data_sync_is_enabled() && $order->get_data_store()->get_current_class_name() === self::class ) { + if ( $data_synchronizer->data_sync_is_enabled() || get_post_type( $order_id ) === 'shop_order_placehold' ) { // Delete the associated post, which in turn deletes order items, etc. through {@see WC_Post_Data}. // Once we stop creating posts for orders, we should do the cleanup here instead. wp_delete_post( $order_id ); diff --git a/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableQuery.php b/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableQuery.php index b6ff8f91be6..92148b218c6 100644 --- a/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableQuery.php +++ b/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableQuery.php @@ -164,6 +164,12 @@ class OrdersTableQuery { */ private $date_query = null; + /** + * Instance of the OrdersTableDataStore class. + * + * @var OrdersTableDataStore + */ + private $order_datastore = null; /** * Sets up and runs the query after processing arguments. @@ -171,19 +177,11 @@ class OrdersTableQuery { * @param array $args Array of query vars. */ public function __construct( $args = array() ) { - global $wpdb; + // Note that ideally we would inject this dependency via constructor, but that's not possible since this class needs to be backward compatible with WC_Order_Query class. + $this->order_datastore = wc_get_container()->get( OrdersTableDataStore::class ); - $datastore = wc_get_container()->get( OrdersTableDataStore::class ); - - // TODO: maybe OrdersTableDataStore::get_all_table_names() could return these keys/indices instead. - $this->tables = array( - 'orders' => $datastore::get_orders_table_name(), - 'addresses' => $datastore::get_addresses_table_name(), - 'operational_data' => $datastore::get_operational_data_table_name(), - 'meta' => $datastore::get_meta_table_name(), - 'items' => $wpdb->prefix . 'woocommerce_order_items', - ); - $this->mappings = $datastore->get_all_order_column_mappings(); + $this->tables = $this->order_datastore::get_all_table_names_with_id(); + $this->mappings = $this->order_datastore->get_all_order_column_mappings(); $this->args = $args; @@ -202,13 +200,13 @@ class OrdersTableQuery { private function maybe_remap_args(): void { $mapping = array( // WP_Query legacy. - 'post_date' => 'date_created_gmt', + 'post_date' => 'date_created', 'post_date_gmt' => 'date_created_gmt', - 'post_modified' => 'date_modified_gmt', + 'post_modified' => 'date_updated', 'post_modified_gmt' => 'date_updated_gmt', 'post_status' => 'status', - '_date_completed' => 'date_completed_gmt', - '_date_paid' => 'date_paid_gmt', + '_date_completed' => 'date_completed', + '_date_paid' => 'date_paid', 'paged' => 'page', 'post_parent' => 'parent_order_id', 'post_parent__in' => 'parent_order_id', @@ -231,12 +229,8 @@ class OrdersTableQuery { // Translate from WC_Order_Query to table structure. 'version' => 'woocommerce_version', - 'date_created' => 'date_created_gmt', - 'date_modified' => 'date_updated_gmt', + 'date_modified' => 'date_updated', 'date_modified_gmt' => 'date_updated_gmt', - 'date_completed' => 'date_completed_gmt', - 'date_completed_gmt' => 'date_completed_gmt', - 'date_paid' => 'date_paid_gmt', 'discount_total' => 'discount_total_amount', 'discount_tax' => 'discount_tax_amount', 'shipping_total' => 'shipping_total_amount', @@ -276,16 +270,26 @@ class OrdersTableQuery { $this->args['meta_query'] = array( $shortcut_meta_query ); // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query } } + + // Date query. + if ( isset( $this->args['date_query'] ) && is_array( $this->args['date_query'] ) ) { + foreach ( $this->args['date_query'] as $index => $query ) { + if ( isset( $query['column'] ) && isset( $mapping[ $query['column'] ] ) ) { + $this->args['date_query'][ $index ]['column'] = $mapping[ $query['column'] ]; + } + } + } } /** * Generates a `WP_Date_Query` compatible query from a given date. * YYYY-MM-DD queries have 'day' precision for backwards compatibility. * - * @param mixed $date The date. Can be a {@see \WC_DateTime}, a timestamp or a string. + * @param mixed $date The date. Can be a {@see \WC_DateTime}, a timestamp or a string. + * @param string $timezone The timezone to use for the date. * @return array An array with keys 'year', 'month', 'day' and possibly 'hour', 'minute' and 'second'. */ - private function date_to_date_query_arg( $date ): array { + private function date_to_date_query_arg( $date, $timezone ): array { $result = array( 'year' => '', 'month' => '', @@ -294,7 +298,7 @@ class OrdersTableQuery { $precision = 'second'; if ( is_numeric( $date ) ) { - $date = new \WC_DateTime( "@{$date}", new \DateTimeZone( 'UTC' ) ); + $date = new \WC_DateTime( "@{$date}", new \DateTimeZone( $timezone ) ); } elseif ( ! is_a( $date, 'WC_DateTime' ) ) { // YYYY-MM-DD queries have 'day' precision for backwards compat. $date = wc_string_to_datetime( $date ); @@ -321,30 +325,54 @@ class OrdersTableQuery { * @throws \Exception When date args are invalid. */ private function process_date_args(): void { - $valid_operators = array( '>', '>=', '=', '<=', '<', '...' ); - $date_queries = array(); - $gmt_date_keys = array( - 'date_created_gmt', - 'date_updated_gmt', - 'date_paid_gmt', - 'date_completed_gmt', + $valid_operators = array( '>', '>=', '=', '<=', '<', '...' ); + $date_queries = array(); + $local_to_gmt_date_keys = array( + 'date_created' => 'date_created_gmt', + 'date_updated' => 'date_updated_gmt', + 'date_paid' => 'date_paid_gmt', + 'date_completed' => 'date_completed_gmt', ); + $gmt_date_keys = array_values( $local_to_gmt_date_keys ); + $local_date_keys = array_keys( $local_to_gmt_date_keys ); - foreach ( array_filter( $gmt_date_keys, array( $this, 'arg_isset' ) ) as $date_key ) { + $valid_date_keys = array_merge( $gmt_date_keys, $local_date_keys ); + $date_keys = array_filter( $valid_date_keys, array( $this, 'arg_isset' ) ); + + // Process already passed date queries args. + if ( $this->arg_isset( 'date_query' ) && is_array( $this->args['date_query'] ) ) { + foreach ( $this->args['date_query'] as $index => $query ) { + if ( ! isset( $query['column'] ) || ! in_array( $query['column'], $valid_date_keys, true ) ) { + unset( $this->args['date_query'][ $index ] ); + continue; + } + // Convert any local dates to GMT. + if ( isset( $local_to_gmt_date_keys[ $query['column'] ] ) ) { + $this->args['date_query'][ $index ]['column'] = $local_to_gmt_date_keys[ $query['column'] ]; + $op = isset( $query['after'] ) ? 'after' : 'before'; + $date_value_local = $query[ $op ]; + $date_value_gmt = wc_string_to_timestamp( get_gmt_from_date( wc_string_to_datetime( $date_value_local ) ) ); + $this->args['date_query'][ $index ][ $op ] = $this->date_to_date_query_arg( $date_value_gmt, 'UTC' ); + } + } + } + + foreach ( $date_keys as $date_key ) { $date_value = $this->args[ $date_key ]; $operator = '='; $dates = array(); + $timezone = in_array( $date_key, $gmt_date_keys, true ) ? '+0000' : wc_timezone_string(); if ( is_string( $date_value ) && preg_match( self::REGEX_SHORTHAND_DATES, $date_value, $matches ) ) { $operator = in_array( $matches[2], $valid_operators, true ) ? $matches[2] : ''; if ( ! empty( $matches[1] ) ) { - $dates[] = $this->date_to_date_query_arg( $matches[1] ); + $dates[] = $this->date_to_date_query_arg( $matches[1], $timezone ); } - $dates[] = $this->date_to_date_query_arg( $matches[3] ); + $dates[] = $this->date_to_date_query_arg( $matches[3], $timezone ); } else { - $dates[] = $this->date_to_date_query_arg( $date_value ); + $dates[] = $this->date_to_date_query_arg( $date_value, $timezone ); } if ( empty( $dates ) || ! $operator || ( '...' === $operator && count( $dates ) < 2 ) ) { @@ -361,6 +389,7 @@ class OrdersTableQuery { $operator_to_keys[] = 'before'; } + $date_key = in_array( $date_key, $local_date_keys, true ) ? $local_to_gmt_date_keys[ $date_key ] : $date_key; $date_queries[] = array_merge( array( 'column' => $date_key, @@ -874,6 +903,9 @@ class OrdersTableQuery { $ids[] = absint( $value ); } elseif ( is_string( $value ) && is_email( $value ) ) { $emails[] = sanitize_email( $value ); + } else { + // Invalid query. + $pieces[] = '1=0'; } } diff --git a/plugins/woocommerce/tests/api-core-tests/tests/orders/order-search.test.js b/plugins/woocommerce/tests/api-core-tests/tests/orders/order-search.test.js index 03ae15d9253..e7d1f400a58 100644 --- a/plugins/woocommerce/tests/api-core-tests/tests/orders/order-search.test.js +++ b/plugins/woocommerce/tests/api-core-tests/tests/orders/order-search.test.js @@ -2,6 +2,9 @@ const { test, expect } = require( '@playwright/test' ); const { getOrderExampleSearchTest } = require( '../../data/order' ); const { customerShippingSearchTest } = require( '../../data/shared/customer' ); +const { + simpleProduct, +} = require('../../data/products-crud'); /** * Order to be searched @@ -55,6 +58,15 @@ const searchParams = [ */ test.describe( 'Order Search API tests', () => { test.beforeAll( async ( { request } ) => { + // Create a product to be associated with the order + const productResponse = await request.post('wp-json/wc/v3/products', { + data: simpleProduct, + }); + const productResponseJSON = await productResponse.json(); + + // Save the created product id against the order line_items + order.line_items[0].product_id = productResponseJSON.id; + // Create an order and save its ID const response = await request.post( '/wp-json/wc/v3/orders', { data: order, @@ -64,6 +76,10 @@ test.describe( 'Order Search API tests', () => { } ); test.afterAll( async ( { request } ) => { + // Cleanup: Delete the product + await request.delete( `/wp-json/wc/v3/products/${ order.line_items[0].product_id }`, { + data: { force: true }, + } ); // Cleanup: Delete the order await request.delete( `/wp-json/wc/v3/orders/${ order.id }`, { data: { force: true }, diff --git a/plugins/woocommerce/tests/api-core-tests/tests/payment-gateways/payment-gateways-crud.test.js b/plugins/woocommerce/tests/api-core-tests/tests/payment-gateways/payment-gateways-crud.test.js index f1e83fe7dba..cdc7509c080 100644 --- a/plugins/woocommerce/tests/api-core-tests/tests/payment-gateways/payment-gateways-crud.test.js +++ b/plugins/woocommerce/tests/api-core-tests/tests/payment-gateways/payment-gateways-crud.test.js @@ -135,7 +135,7 @@ test.describe('Payment Gateways API tests', () => { "default": "", "tip": "If COD is only available for certain methods, set it up here. Leave blank to enable for all methods.", "placeholder": "", - "options": { + "options": expect.objectContaining({ "Flat rate": { "flat_rate": "Any "Flat rate" method" }, @@ -145,7 +145,7 @@ test.describe('Payment Gateways API tests', () => { "Local pickup": { "local_pickup": "Any "Local pickup" method" } - } + }) }, "enable_for_virtual": { "id": "enable_for_virtual", diff --git a/plugins/woocommerce/tests/api-core-tests/tests/shipping/shipping-method.test.js b/plugins/woocommerce/tests/api-core-tests/tests/shipping/shipping-method.test.js index 51f52e70144..72ac2b705f7 100644 --- a/plugins/woocommerce/tests/api-core-tests/tests/shipping/shipping-method.test.js +++ b/plugins/woocommerce/tests/api-core-tests/tests/shipping/shipping-method.test.js @@ -66,7 +66,7 @@ test.describe('Shipping methods API tests', () => { const responseJSON = await response.json(); expect(response.status()).toEqual(200); expect(Array.isArray(responseJSON)).toBe(true); - expect(responseJSON.length).toEqual(3); + expect(responseJSON.length).toBeGreaterThanOrEqual(3); expect(responseJSON[0].id).toEqual("flat_rate"); expect(responseJSON[1].id).toEqual("free_shipping"); expect(responseJSON[2].id).toEqual("local_pickup"); diff --git a/plugins/woocommerce/tests/e2e-pw/bin/test-env-setup.sh b/plugins/woocommerce/tests/e2e-pw/bin/test-env-setup.sh index ebb2cac3099..9f3d7601740 100755 --- a/plugins/woocommerce/tests/e2e-pw/bin/test-env-setup.sh +++ b/plugins/woocommerce/tests/e2e-pw/bin/test-env-setup.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash ENABLE_HPOS="${ENABLE_HPOS:-0}" +ENABLE_NEW_PRODUCT_EDITOR="${ENABLE_NEW_PRODUCT_EDITOR:-0}" +ENABLE_TRACKING="${ENABLE_TRACKING:-0}" wp-env run tests-cli "wp theme install twentynineteen --activate" @@ -28,3 +30,13 @@ if [ $ENABLE_HPOS == 1 ]; then echo 'Enable the COT feature' wp-env run tests-cli "wp plugin install https://gist.github.com/vedanshujain/564afec8f5e9235a1257994ed39b1449/archive/b031465052fc3e04b17624acbeeb2569ef4d5301.zip --activate" fi + +if [ $ENABLE_NEW_PRODUCT_EDITOR == 1 ]; then + echo 'Enable the new product editor feature' + wp-env run tests-cli "wp plugin install https://github.com/woocommerce/woocommerce-experimental-enable-new-product-editor/releases/download/0.1.0/woocommerce-experimental-enable-new-product-editor.zip --activate" +fi + +if [ $ENABLE_TRACKING == 1 ]; then + echo 'Enable tracking' + wp-env run tests-cli "wp option update woocommerce_allow_tracking 'yes'" +fi diff --git a/plugins/woocommerce/tests/e2e-pw/test-data/data.js b/plugins/woocommerce/tests/e2e-pw/test-data/data.js index c4423c86be4..4a2868141e0 100644 --- a/plugins/woocommerce/tests/e2e-pw/test-data/data.js +++ b/plugins/woocommerce/tests/e2e-pw/test-data/data.js @@ -95,6 +95,24 @@ const storeDetails = { downloadable: 'Downloads', }, }, + liberia: { + store: { + address: 'addr1', + city: 'Kakata', + zip: 'Division 1', + email: admin.email, + country: 'Liberia — Margibi', // corresponding to the text value of the option, + countryCode: 'LR', + }, + expectedIndustries: 8, // There are 8 checkboxes on the page (in Liberia), adjust this constant if we change that + industries: { + other: 'Other', + }, + products: { + physical: 'Physical products', + downloadable: 'Downloads', + }, + }, }; module.exports = { diff --git a/plugins/woocommerce/tests/e2e-pw/tests/activate-and-setup/complete-onboarding-wizard.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/activate-and-setup/complete-onboarding-wizard.spec.js index 6fe61713ae1..a4ecc40164d 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/activate-and-setup/complete-onboarding-wizard.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/activate-and-setup/complete-onboarding-wizard.spec.js @@ -145,23 +145,23 @@ test.describe( 'Store owner can complete onboarding wizard', () => { } ); } ); -// !Changed from Japanese to Malta store, as Japanese Yen does not use decimals +// !Changed from Japanese to Liberian store, as Japanese Yen does not use decimals test.describe( - 'A Malta store can complete the selective bundle install but does not include WCPay.', + 'A Liberian store can complete the selective bundle install but does not include WCPay.', () => { test.use( { storageState: process.env.ADMINSTATE } ); test.beforeEach( async () => { // Complete "Store Details" step through the API to prevent flakiness when run on external sites. - await api.update.storeDetails( storeDetails.malta.store ); + await api.update.storeDetails( storeDetails.liberia.store ); } ); // eslint-disable-next-line jest/expect-expect test( 'can choose the "Other" industry', async ( { page } ) => { await onboarding.completeIndustrySection( page, - storeDetails.malta.industries, - storeDetails.malta.expectedIndustries + storeDetails.liberia.industries, + storeDetails.liberia.expectedIndustries ); await page.click( 'button >> text=Continue' ); } ); @@ -174,14 +174,14 @@ test.describe( await onboarding.completeIndustrySection( page, - storeDetails.malta.industries, - storeDetails.malta.expectedIndustries + storeDetails.liberia.industries, + storeDetails.liberia.expectedIndustries ); await page.click( 'button >> text=Continue' ); await onboarding.completeProductTypesSection( page, - storeDetails.malta.products + storeDetails.liberia.products ); // Make sure WC Payments is NOT present await expect( diff --git a/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js index 9c1e273bcb3..1fc2dab43a5 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/admin-analytics/analytics-overview.spec.js @@ -36,7 +36,13 @@ test.describe( 'Analytics pages', () => { '//button[@title="Choose which analytics to display and the section name"]' ); await page.click( 'text=Move up' ); - await page.waitForTimeout( 1000 ); + + // wait for the changes to be saved + await page.waitForResponse( + ( response ) => + response.url().includes( '/users/' ) && + response.status() === 200 + ); } } ); diff --git a/plugins/woocommerce/tests/e2e-pw/tests/admin-tasks/payment.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/admin-tasks/payment.spec.js index 78435a0548b..56052007ec4 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/admin-tasks/payment.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/admin-tasks/payment.spec.js @@ -113,9 +113,6 @@ test.describe( 'Payment setup task', () => { .catch( () => {} ); await page.waitForLoadState( 'networkidle' ); - // purposely no await again - page.click( 'button.toggle-button' ); - // enable COD payment option await page.click( 'div.woocommerce-task-payment-cod > div.woocommerce-task-payment__footer > button' diff --git a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js index 22409e42599..ab8d0a00af6 100644 --- a/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js +++ b/plugins/woocommerce/tests/e2e-pw/tests/merchant/create-variable-product.spec.js @@ -55,18 +55,28 @@ test.describe.serial( 'Add New Variable Product Page', () => { if ( i > 0 ) { await page.click( 'button.add_attribute' ); } - await page.fill( - `input[name="attribute_names[${ i }]"]`, - `attr #${ i + 1 }` - ); - await page.fill( - `textarea[name="attribute_values[${ i }]"]`, - 'val1 | val2' - ); + + await page + .locator( + `.woocommerce_attribute_data input[name="attribute_names[${ i }]"]` + ) + .fill( `attr #${ i + 1 }` ); + await page + .locator( + `.woocommerce_attribute_data textarea[name="attribute_values[${ i }]"]` + ) + .fill( 'val1 | val2' ); } await page.keyboard.press( 'ArrowUp' ); await page.click( 'text=Save attributes' ); + // wait for the attributes to be saved + await page.waitForResponse( + ( response ) => + response.url().includes( '/post.php?post=' ) && + response.status() === 200 + ); + // Save before going to the Variations tab to prevent variations from all attributes to be automatically created await page.locator( '#save-post' ).click(); await expect( @@ -205,23 +215,28 @@ test.describe.serial( 'Add New Variable Product Page', () => { if ( i > 0 ) { await page.click( 'button.add_attribute' ); } - await page.fill( - `input[name="attribute_names[${ i }]"]`, - `attr #${ i + 1 }` - ); - await page.fill( - `textarea[name="attribute_values[${ i }]"]`, - 'val1 | val2' - ); + + await page + .locator( + `.woocommerce_attribute_data input[name="attribute_names[${ i }]"]` + ) + .fill( `attr #${ i + 1 }` ); + await page + .locator( + `.woocommerce_attribute_data textarea[name="attribute_values[${ i }]"]` + ) + .fill( 'val1 | val2' ); await page.keyboard.press( 'ArrowUp' ); await page.click( 'text=Save attributes' ); - await expect( - page - .locator( '.woocommerce_attribute.closed' ) - .filter( { hasText: `attr #${ i + 1 }` } ) - ).toBeVisible(); } + // wait for the attributes to be saved + await page.waitForResponse( + ( response ) => + response.url().includes( '/post.php?post=' ) && + response.status() === 200 + ); + // Save before going to the Variations tab to prevent variations from all attributes to be automatically created await page.locator( '#save-post' ).click(); await expect( diff --git a/plugins/woocommerce/tests/e2e-pw/tests/new-product-editor/new-product-editor.spec.js b/plugins/woocommerce/tests/e2e-pw/tests/new-product-editor/new-product-editor.spec.js new file mode 100644 index 00000000000..766523ade90 --- /dev/null +++ b/plugins/woocommerce/tests/e2e-pw/tests/new-product-editor/new-product-editor.spec.js @@ -0,0 +1,160 @@ +const { test, expect } = require( '@playwright/test' ); + +const ALL_PRODUCTS_URL = 'wp-admin/edit.php?post_type=product'; +const NEW_EDITOR_ADD_PRODUCT_URL = + 'wp-admin//admin.php?page=wc-admin&path=%2Fadd-product'; + +const isNewProductEditorSupposedToBeEnabled = !! process.env + .ENABLE_NEW_PRODUCT_EDITOR; +const isTrackingSupposedToBeEnabled = !! process.env.ENABLE_TRACKING; + +async function clickAddNewMenuItem( page ) { + await page + .locator( '#menu-posts-product' ) + .getByRole( 'link', { name: 'Add New' } ) + .click(); +} + +async function dismissGuideIfShown( page ) { + try { + await page + .getByRole( 'button', { + name: "I'll explore on my own", + } ) + .click( { timeout: 5000 } ); + } catch ( error ) {} +} + +async function dismissFeedbackModalIfShown( page ) { + if ( ! isTrackingSupposedToBeEnabled ) { + // no modal should be shown, so don't even look for button + return; + } + + try { + await page + .getByRole( 'button', { name: 'Skip' } ) + .click( { timeout: 5000 } ); + } catch ( error ) {} +} + +async function expectOldProductEditor( page ) { + await expect( + page.locator( '#woocommerce-product-data h2' ) + ).toContainText( 'Product data' ); +} + +async function expectNewProductEditor( page ) { + await expect( + page.locator( '.woocommerce-product-title__wrapper' ) + ).toContainText( 'New product' ); +} + +test.describe( 'New product editor', () => { + test.describe( 'Default (disabled)', () => { + test.use( { storageState: process.env.ADMINSTATE } ); + + test.skip( + isNewProductEditorSupposedToBeEnabled, + 'The new product editor is being tested' + ); + + test( 'is feature flag disabled', async ( { page } ) => { + // we have to go to a WCAdmin page to get the wcAdminFeatures global + await page.goto( ALL_PRODUCTS_URL ); + + const wcAdminFeatures = await page.evaluate( + 'window.wcAdminFeatures' + ); + + expect( + !! wcAdminFeatures[ 'new-product-management-experience' ] + ).toBeFalsy(); + } ); + + test( 'is not hooked up to sidebar "Add New"', async ( { page } ) => { + await page.goto( ALL_PRODUCTS_URL ); + await clickAddNewMenuItem( page ); + await expectOldProductEditor( page ); + } ); + } ); + + test.describe( 'Enabled', () => { + test.use( { storageState: process.env.ADMINSTATE } ); + + test.skip( + ! isNewProductEditorSupposedToBeEnabled, + 'The new product editor is not being tested' + ); + + test( 'is feature flag enabled', async ( { page } ) => { + // we have to go to a WCAdmin page to get the wcAdminFeatures global + await page.goto( ALL_PRODUCTS_URL ); + + const wcAdminFeatures = await page.evaluate( + 'window.wcAdminFeatures' + ); + + expect( + !! wcAdminFeatures[ 'new-product-management-experience' ] + ).toBeTruthy(); + } ); + + test( 'is hooked up to sidebar "Add New"', async ( { page } ) => { + await page.goto( ALL_PRODUCTS_URL ); + await clickAddNewMenuItem( page ); + await expectNewProductEditor( page ); + } ); + + test( 'can be disabled from the header', async ( { page } ) => { + await page.goto( NEW_EDITOR_ADD_PRODUCT_URL ); + await dismissGuideIfShown( page ); + + // turn off new product editor from the header + await page + .getByRole( 'button', { name: 'More product options' } ) + .click(); + await page + .getByRole( 'menuitem', { name: 'Use the classic editor' } ) + .click(); + + await dismissFeedbackModalIfShown( page ); + + await expectOldProductEditor( page ); + } ); + + test( 'can be disabled from the feedback footer', async ( { + page, + } ) => { + test.skip( + ! isTrackingSupposedToBeEnabled, + 'Tracking is not enabled' + ); + + // ideally we would have a way to reset from the test whether + // the CES feedback modal was shown so we could test this; + // currently, this will always be skipped if the disabling + // from the header test succeeds + + await page.goto( NEW_EDITOR_ADD_PRODUCT_URL ); + await dismissGuideIfShown( page ); + + let footerShown = true; + + // turn off new product editor from the feedback footer, if shown + try { + await page + .getByRole( 'button', { name: 'Turn it off' } ) + .click( { timeout: 5000 } ); + } catch ( error ) { + footerShown = false; + } + + test.skip( ! footerShown, 'Feedback footer was not shown' ); + + await dismissFeedbackModalIfShown( page ); + + await expectOldProductEditor( page ); + } ); + } ); +} ); diff --git a/plugins/woocommerce/tests/legacy/bootstrap.php b/plugins/woocommerce/tests/legacy/bootstrap.php index 01aef6f2c19..7463227d793 100644 --- a/plugins/woocommerce/tests/legacy/bootstrap.php +++ b/plugins/woocommerce/tests/legacy/bootstrap.php @@ -89,6 +89,10 @@ class WC_Unit_Tests_Bootstrap { // re-initialize dependency injection, this needs to be the last operation after everything else is in place. $this->initialize_dependency_injection(); + if ( getenv( 'HPOS' ) ) { + $this->initialize_hpos(); + } + error_reporting(error_reporting() & ~E_DEPRECATED); } @@ -140,6 +144,17 @@ class WC_Unit_Tests_Bootstrap { CodeHacker::enable(); } + /** + * Initialize HPOS if tests need to run in HPOS context. + * + * @return void + */ + private function initialize_hpos() { + \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::delete_order_custom_tables(); + \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::create_order_custom_table_if_not_exist(); + \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::toggle_cot( true ); + } + /** * Re-initialize the dependency injection engine. * diff --git a/plugins/woocommerce/tests/legacy/framework/class-wc-unit-test-case.php b/plugins/woocommerce/tests/legacy/framework/class-wc-unit-test-case.php index a7f00cb42e7..488cea9e120 100644 --- a/plugins/woocommerce/tests/legacy/framework/class-wc-unit-test-case.php +++ b/plugins/woocommerce/tests/legacy/framework/class-wc-unit-test-case.php @@ -7,6 +7,7 @@ use Automattic\WooCommerce\Proxies\LegacyProxy; use Automattic\WooCommerce\Testing\Tools\CodeHacking\CodeHacker; +use Automattic\WooCommerce\Utilities\OrderUtil; use PHPUnit\Framework\Constraint\IsType; /** @@ -388,4 +389,15 @@ class WC_Unit_Test_Case extends WP_HTTP_TestCase { $events = self::get_tracks_events( $event_name ); $this->assertEmpty( $events ); } + + /** + * Mark test skipped when HPOS is enabled. + * + * @param string $message Message to display when test is skipped. + */ + protected function skip_if_hpos_enabled( $message ) { + if ( OrderUtil::custom_orders_table_usage_is_enabled() ) { + $this->markTestSkipped( $message ); + } + } } diff --git a/plugins/woocommerce/tests/legacy/unit-tests/admin/class-wc-tests-admin-dashboard.php b/plugins/woocommerce/tests/legacy/unit-tests/admin/class-wc-tests-admin-dashboard.php index 56b0e4cd6ca..535869c41b0 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/admin/class-wc-tests-admin-dashboard.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/admin/class-wc-tests-admin-dashboard.php @@ -37,6 +37,7 @@ class WC_Tests_Admin_Dashboard extends WC_Unit_Test_Case { * Test: get_status_widget */ public function test_status_widget() { + $this->skip_if_hpos_enabled( 'We don\'t support legacy reports on HPOS' ); wp_set_current_user( $this->user ); $order = WC_Helper_Order::create_order(); $order->set_status( 'completed' ); @@ -58,6 +59,7 @@ class WC_Tests_Admin_Dashboard extends WC_Unit_Test_Case { * Test: get_status_widget with woo admin disabled. */ public function test_status_widget_with_woo_admin_disabled() { + $this->skip_if_hpos_enabled( 'We don\'t support legacy reports on HPOS' ); wp_set_current_user( $this->user ); $order = WC_Helper_Order::create_order(); $order->set_status( 'completed' ); diff --git a/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-admin-report.php b/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-admin-report.php index 480af399bdc..4b21d058eb3 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-admin-report.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-admin-report.php @@ -18,6 +18,16 @@ class WC_Tests_Admin_Report extends WC_Unit_Test_Case { include_once WC_Unit_Tests_Bootstrap::instance()->plugin_dir . '/includes/admin/reports/class-wc-admin-report.php'; } + /** + * Set up the test. + */ + public function setUp(): void { + parent::setUp(); + if ( \Automattic\WooCommerce\Utilities\OrderUtil::custom_orders_table_usage_is_enabled() ) { + $this->markTestSkipped( 'This test is not compatible with the custom orders table.' ); + } + } + /** * Clear cached report data. * diff --git a/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-report-sales-by-date.php b/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-report-sales-by-date.php index 8f3364deb11..b7e602e0c56 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-report-sales-by-date.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/admin/reports/class-wc-tests-report-sales-by-date.php @@ -18,6 +18,16 @@ class WC_Tests_Report_Sales_By_Date extends WC_Unit_Test_Case { include_once WC_Unit_Tests_Bootstrap::instance()->plugin_dir . '/includes/admin/reports/class-wc-report-sales-by-date.php'; } + /** + * Set up the test. + */ + public function setUp(): void { + parent::setUp(); + if ( \Automattic\WooCommerce\Utilities\OrderUtil::custom_orders_table_usage_is_enabled() ) { + $this->markTestSkipped( 'This test is not compatible with the custom orders table.' ); + } + } + /** * Clear cached report data. * diff --git a/plugins/woocommerce/tests/legacy/unit-tests/crud/meta.php b/plugins/woocommerce/tests/legacy/unit-tests/crud/meta.php index 3bcc8da38d8..00c34fd5eac 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/crud/meta.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/crud/meta.php @@ -1,4 +1,7 @@ assertCount( 1, $order->get_meta_data() ); $this->assertTrue( in_array( 'random', wp_list_pluck( $order->get_meta_data(), 'key' ) ) ); - // The new $order should have 3 items of meta since it's freshly loaded. - $this->assertCount( 3, $new_order->get_meta_data() ); + $expected_count = OrderUtil::custom_orders_table_usage_is_enabled() ? 2 : 3; + // The new $order should have 3 items (or 2 in case of HPOS since direct post updates are not read) of meta since it's freshly loaded. + $this->assertCount( $expected_count, $new_order->get_meta_data() ); $this->assertTrue( in_array( 'random', wp_list_pluck( $new_order->get_meta_data(), 'key' ) ) ); $this->assertTrue( in_array( 'random_other', wp_list_pluck( $new_order->get_meta_data(), 'key' ) ) ); - $this->assertTrue( in_array( 'random_other_pre_crud', wp_list_pluck( $new_order->get_meta_data(), 'key' ) ) ); + if ( ! OrderUtil::custom_orders_table_usage_is_enabled() ) { + $this->assertTrue( in_array( 'random_other_pre_crud', wp_list_pluck( $new_order->get_meta_data(), 'key' ), true ) ); + } } /** diff --git a/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php b/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php index 1d6a917bc02..e85e8f0fe50 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-crud-orders.php @@ -5,6 +5,8 @@ * @package WooCommerce\Tests\CRUD */ +use Automattic\WooCommerce\Utilities\OrderUtil; + /** * Meta * @@ -882,10 +884,10 @@ class WC_Tests_CRUD_Orders extends WC_Unit_Test_Case { $object = new WC_Order(); // Save + create. - $save_id = $object->save(); - $post = get_post( $save_id ); - $this->assertEquals( 'shop_order', $post->post_type ); - $this->assertEquals( 'shop_order', $post->post_type ); + $save_id = $object->save(); + $post = get_post( $save_id ); + $expected_post_type = OrderUtil::custom_orders_table_usage_is_enabled() ? 'shop_order_placehold' : 'shop_order'; + $this->assertEquals( $expected_post_type, $post->post_type ); // Update. $update_id = $object->save(); diff --git a/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-order-functions.php b/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-order-functions.php index 56d3965f06f..b79ef79f688 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-order-functions.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/order/class-wc-tests-order-functions.php @@ -109,15 +109,19 @@ class WC_Tests_Order_Functions extends WC_Unit_Test_Case { ->will( $this->returnValueMap( $test_counts[ $order_type ] ) ); } - $add_mock_datastores = function( $stores ) use ( $mock_datastores ) { + $add_mock_datastores = function ( $stores ) use ( $mock_datastores ) { return array_merge( $stores, $mock_datastores ); }; - $add_mock_order_type = function( $order_types ) use ( $mock_datastores ) { + $add_mock_order_type = function ( $order_types ) use ( $mock_datastores ) { return array( 'shop_order', 'order-fake-type' ); }; + $return_mock_order_data_store = function ( $stores ) use ( $mock_datastores ) { + return $mock_datastores['order']; + }; add_filter( 'woocommerce_data_stores', $add_mock_datastores ); add_filter( 'wc_order_types', $add_mock_order_type ); + add_filter( 'woocommerce_order_data_store', $return_mock_order_data_store, 1000, 2 ); // Check counts for specific order types. $this->assertEquals( 2, wc_orders_count( 'on-hold', 'shop_order' ) ); @@ -131,6 +135,7 @@ class WC_Tests_Order_Functions extends WC_Unit_Test_Case { remove_filter( 'woocommerce_data_stores', $add_mock_datastores ); remove_filter( 'wc_order_types', $add_mock_order_type ); + remove_filter( 'woocommerce_order_data_store', $return_mock_order_data_store, 1000 ); // Confirm that everything's back to normal. wp_cache_flush(); @@ -190,7 +195,8 @@ class WC_Tests_Order_Functions extends WC_Unit_Test_Case { // Assert the return when $the_order args is false. $this->assertFalse( wc_get_order( false ) ); - $post = get_post( $order->get_id() ); + $post = get_post( $order->get_id() ); + $theorder = $order; $this->assertInstanceOf( 'WC_Order', wc_get_order(), diff --git a/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Helpers/OrderHelper.php b/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Helpers/OrderHelper.php index 10bea7dcbdc..0c8a35af80f 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Helpers/OrderHelper.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Helpers/OrderHelper.php @@ -14,6 +14,7 @@ use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableControlle use Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer; use Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore; use Automattic\WooCommerce\Internal\Features\FeaturesController; +use Automattic\WooCommerce\Utilities\OrderUtil; use WC_Data_Store; use WC_Mock_Payment_Gateway; use WC_Order; @@ -151,6 +152,23 @@ class OrderHelper { } } + /** + * Enables or disables the custom orders table across WP temporarily. + * + * @param boolean $enabled TRUE to enable COT or FALSE to disable. + * @return void + */ + public static function toggle_cot( bool $enabled ) { + $features_controller = wc_get_container()->get( Featurescontroller::class ); + $features_controller->change_feature_enable( 'custom_order_tables', $enabled ); + + update_option( CustomOrdersTableController::CUSTOM_ORDERS_TABLE_USAGE_ENABLED_OPTION, wc_bool_to_string( $enabled ) ); + + // Confirm things are really correct. + $wc_data_store = WC_Data_Store::load( 'order' ); + assert( is_a( $wc_data_store->get_current_class_name(), OrdersTableDataStore::class, true ) === $enabled ); + } + /** * Helper method to create custom tables if not present. */ @@ -170,6 +188,8 @@ class OrderHelper { * @return int Order ID */ public static function create_complex_wp_post_order() { + $current_cot_state = OrderUtil::custom_orders_table_usage_is_enabled(); + self::toggle_cot( false ); update_option( 'woocommerce_prices_include_tax', 'yes' ); update_option( 'woocommerce_calc_taxes', 'yes' ); $uniq_cust_id = wp_generate_password( 10, false ); @@ -239,6 +259,8 @@ class OrderHelper { $order->save(); $order->save_meta_data(); + self::toggle_cot( $current_cot_state ); + return $order->get_id(); } diff --git a/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Tests/Version3/date-filtering.php b/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Tests/Version3/date-filtering.php index 2a513e41dc4..b18c201cb44 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Tests/Version3/date-filtering.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/rest-api/Tests/Version3/date-filtering.php @@ -10,6 +10,9 @@ * @package WooCommerce\Tests\API */ +use Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore; +use Automattic\WooCommerce\Utilities\OrderUtil; + /** * Trait for testing the date filtering on controllers that inherit from WC_REST_CRUD_Controller. */ @@ -34,18 +37,34 @@ trait DateFilteringForCrudControllers { public function test_filter_by_creation_or_modification_date( $param_name, $filter_by_gmt, $expected_to_be_returned ) { global $wpdb; + $timezone_string_option = get_option( 'timezone_string' ); + update_option( 'timezone_string', 'Africa/Blantyre', true ); // +02:00 wp_set_current_user( $this->user ); - $item_id = $this->get_item_for_date_filtering_tests()->get_id(); + $item = $this->get_item_for_date_filtering_tests(); + $item_id = $item->get_id(); - // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared - $wpdb->query( - 'UPDATE ' . $wpdb->prefix . "posts SET + if ( $item instanceof WC_Abstract_Order && OrderUtil::custom_orders_table_usage_is_enabled() ) { + $wpdb->update( + OrdersTableDataStore::get_orders_table_name(), + array( + 'date_created_gmt' => '2000-01-01T10:00:00', + 'date_updated_gmt' => '2000-02-01T10:00:00', + ), + array( + 'id' => $item->get_id(), + ) + ); + } else { + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared + $wpdb->query( + 'UPDATE ' . $wpdb->prefix . "posts SET post_date = '2000-01-01T12:00:00', post_date_gmt = '2000-01-01T10:00:00', post_modified = '2000-02-01T12:00:00', post_modified_gmt = '2000-02-01T10:00:00' WHERE ID = " . $item_id - ); + ); + } // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared $request = new WP_REST_Request( 'GET', $this->get_endpoint_for_date_filtering_tests() ); @@ -60,6 +79,7 @@ trait DateFilteringForCrudControllers { $this->assertEquals( 200, $response->get_status() ); $this->assertEquals( $expected_to_be_returned ? 1 : 0, count( $response_items ) ); + update_option( 'timezone_string', $timezone_string_option ); } /** @@ -80,19 +100,35 @@ trait DateFilteringForCrudControllers { public function test_can_filter_by_more_than_one_date( $first_param_name, $first_param_value, $second_param_name, $second_param_value, $filter_by_gmt, $expected_to_be_returned ) { global $wpdb; + $timezone_string_option = get_option( 'timezone_string' ); + update_option( 'timezone_string', 'Africa/Blantyre', true ); // +02:00 wp_set_current_user( $this->user ); - $item_id = $this->get_item_for_date_filtering_tests()->get_id(); + $item = $this->get_item_for_date_filtering_tests(); + $item_id = $item->get_id(); - // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared - $wpdb->query( - 'UPDATE ' . $wpdb->prefix . "posts SET + if ( $item instanceof WC_Abstract_Order && OrderUtil::custom_orders_table_usage_is_enabled() ) { + $wpdb->update( + OrdersTableDataStore::get_orders_table_name(), + array( + 'date_created_gmt' => '2000-01-01T10:00:00', + 'date_updated_gmt' => '2000-02-01T10:00:00', + ), + array( + 'id' => $item->get_id(), + ) + ); + } else { + // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared + $wpdb->query( + 'UPDATE ' . $wpdb->prefix . "posts SET post_date = '2000-01-01T12:00:00', post_date_gmt = '2000-01-01T10:00:00', post_modified = '2000-02-01T12:00:00', post_modified_gmt = '2000-02-01T10:00:00' WHERE ID = " . $item_id - ); - // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared + ); + // phpcs:enable WordPress.DB.PreparedSQL.NotPrepared + } $request = new WP_REST_Request( 'GET', $this->get_endpoint_for_date_filtering_tests() ); $request->set_query_params( @@ -107,5 +143,6 @@ trait DateFilteringForCrudControllers { $this->assertEquals( 200, $response->get_status() ); $this->assertEquals( $expected_to_be_returned ? 1 : 0, count( $response_items ) ); + update_option( 'timezone_string', $timezone_string_option ); } } diff --git a/plugins/woocommerce/tests/legacy/unit-tests/util/install.php b/plugins/woocommerce/tests/legacy/unit-tests/util/install.php index 70af9b7c15c..5783c85e7b9 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/util/install.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/util/install.php @@ -166,4 +166,5 @@ class WC_Tests_Install extends WC_Unit_Test_Case { $this->assertContains( 'some_table_name', WC_Install::get_tables() ); } + } diff --git a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api-init.php b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api-init.php index ed6812b89e6..ff2855420f8 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api-init.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api-init.php @@ -104,26 +104,4 @@ class WC_Admin_Tests_API_Init extends WC_REST_Unit_Test_Case { $this->assertEmpty( $this->queue->actions ); } - - /** - * Test that updating wc_last_active triggers a customer sync. - * - * @return void - */ - public function test_other_last_active_update_customer_sync() { - // First call creates the meta key. - // These don't use wc_update_user_last_active() because the timestamps will be the same. - update_user_meta( 1, 'wc_last_active', time() - 10 ); - // Second call updates it which triggers the sync. - update_user_meta( 1, 'wc_last_active', time() ); - - $this->assertCount( 1, $this->queue->actions ); - $this->assertArraySubset( - array( - 'hook' => CustomersScheduler::get_action( 'import' ), - 'args' => array( 1 ), - ), - $this->queue->actions[0] - ); - } } diff --git a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api/reports-import.php b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api/reports-import.php index b4a78652004..b70e973b83f 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api/reports-import.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api/reports-import.php @@ -207,7 +207,6 @@ class WC_Admin_Tests_API_Reports_Import extends WC_REST_Unit_Test_Case { $pending_actions ); $this->assertContains( 'wc-admin_import_orders', $pending_hooks ); - $this->assertContains( 'wc-admin_import_customers', $pending_hooks ); // Cancel outstanding actions. $request = new WP_REST_Request( 'POST', $this->endpoint . '/cancel' ); @@ -226,7 +225,6 @@ class WC_Admin_Tests_API_Reports_Import extends WC_REST_Unit_Test_Case { $pending_actions ); $this->assertNotContains( 'wc-admin_import_orders', $pending_hooks ); - $this->assertNotContains( 'wc-admin_import_customers', $pending_hooks ); } /** @@ -323,13 +321,8 @@ class WC_Admin_Tests_API_Reports_Import extends WC_REST_Unit_Test_Case { // Create 1 draft order - to be excluded from totals. $order = WC_Helper_Order::create_order( $this->customer, $product ); $order->set_date_created( time() - ( 5 * DAY_IN_SECONDS ) ); + $order->set_status( 'auto-draft' ); $order->save(); - wp_update_post( - array( - 'ID' => $order->get_id(), - 'post_status' => 'auto-draft', - ) - ); // Test totals and total params. $request = new WP_REST_Request( 'GET', $this->endpoint . '/totals' ); diff --git a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/product-form/field.php b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/product-form/field.php index 8fb257ee73a..ddcb3e0013a 100644 --- a/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/product-form/field.php +++ b/plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/product-form/field.php @@ -21,7 +21,7 @@ class WC_Admin_Tests_ProductForm_Field extends WC_Unit_Test_Case { new Field( 'id', 'woocommerce', - array(), + array() ); } } diff --git a/plugins/woocommerce/tests/php/helpers/HPOSToggleTrait.php b/plugins/woocommerce/tests/php/helpers/HPOSToggleTrait.php index 3cda5b546b4..4531a3eb28d 100644 --- a/plugins/woocommerce/tests/php/helpers/HPOSToggleTrait.php +++ b/plugins/woocommerce/tests/php/helpers/HPOSToggleTrait.php @@ -49,14 +49,7 @@ trait HPOSToggleTrait { * @return void */ private function toggle_cot( bool $enabled ): void { - $features_controller = wc_get_container()->get( Featurescontroller::class ); - $features_controller->change_feature_enable( 'custom_order_tables', $enabled ); - - update_option( CustomOrdersTableController::CUSTOM_ORDERS_TABLE_USAGE_ENABLED_OPTION, wc_bool_to_string( $enabled ) ); - - // Confirm things are really correct. - $wc_data_store = WC_Data_Store::load( 'order' ); - assert( is_a( $wc_data_store->get_current_class_name(), OrdersTableDataStore::class, true ) === $enabled ); + OrderHelper::toggle_cot( $enabled ); } /** diff --git a/plugins/woocommerce/tests/php/includes/class-wc-install-test.php b/plugins/woocommerce/tests/php/includes/class-wc-install-test.php index a2ec3899ec6..0afda1bbea1 100644 --- a/plugins/woocommerce/tests/php/includes/class-wc-install-test.php +++ b/plugins/woocommerce/tests/php/includes/class-wc-install-test.php @@ -97,4 +97,12 @@ class WC_Install_Test extends \WC_Unit_Test_Case { $this->assertContains( 'premium_support', array_keys( $plugin_row_data ) ); } + /** + * Test that dbDelta is a noop on an installed site. + */ + public function test_dbDelta_is_a_noop() { + $db_delta_result = WC_Install::create_tables(); + $this->assertEmpty( $db_delta_result ); + } + } diff --git a/plugins/woocommerce/tests/php/includes/class-wc-order-factory-test.php b/plugins/woocommerce/tests/php/includes/class-wc-order-factory-test.php index e3af7d32052..9675e0e8fc4 100644 --- a/plugins/woocommerce/tests/php/includes/class-wc-order-factory-test.php +++ b/plugins/woocommerce/tests/php/includes/class-wc-order-factory-test.php @@ -1,16 +1,48 @@ cot_state = \Automattic\WooCommerce\Utilities\OrderUtil::custom_orders_table_usage_is_enabled(); + OrderHelper::toggle_cot( false ); + } + + /** + * Restore COT state after the test. + * + * @return void + */ + public function tearDown(): void { + parent::tearDown(); + wp_cache_flush(); + OrderHelper::toggle_cot( $this->cot_state ); + } + /** * @testDox get_orders should be able to return multiple orders of different types. */ public function test_get_orders_with_multiple_order_type() { - $order1 = \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::create_complex_wp_post_order(); - $order2 = \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::create_complex_wp_post_order(); + $order1 = OrderHelper::create_complex_wp_post_order(); + $order2 = OrderHelper::create_complex_wp_post_order(); assert( $order1 > 0 ); assert( $order2 > 0 ); @@ -45,4 +77,23 @@ class WC_Order_Factory_Test extends WC_Unit_Test_Case { $this->assertInstanceOf( WC_Order_Refund::class, $orders_with_diff_types[3] ); } + /** + * @testDox Test that cache does not interfere with order sorting. + */ + public function test_cache_dont_interfere_with_orders() { + OrderHelper::toggle_cot( $this->cot_state ); + $order1 = OrderHelper::create_order(); + $order2 = OrderHelper::create_order(); + + wp_cache_flush(); + $cache = wc_get_container()->get( OrderCache::class ); + $cache->set( $order2, $order2->get_id() ); + + $orders = WC_Order_Factory::get_orders( array( $order1->get_id(), $order2->get_id() ) ); + $this->assertEquals( 2, count( $orders ) ); + $this->assertEquals( $order1->get_id(), $orders[0]->get_id() ); + $this->assertEquals( $order2->get_id(), $orders[1]->get_id() ); + OrderHelper::toggle_cot( false ); + } + } diff --git a/plugins/woocommerce/tests/php/includes/data-stores/class-wc-customer-data-store-session-test.php b/plugins/woocommerce/tests/php/includes/data-stores/class-wc-customer-data-store-session-test.php index 75ef103b8e0..126d1b055a5 100644 --- a/plugins/woocommerce/tests/php/includes/data-stores/class-wc-customer-data-store-session-test.php +++ b/plugins/woocommerce/tests/php/includes/data-stores/class-wc-customer-data-store-session-test.php @@ -11,11 +11,12 @@ class WC_Customer_Data_Store_Session_Test extends WC_Unit_Test_Case { * @see https://github.com/woocommerce/woocommerce/issues/28759 * @dataProvider provide_customers_with_different_addresses * - * @param WC_Customer $customer The customer object being tested. - * @param bool $states_should_match If the billing and shipping states should match. - * @param bool $countries_should_match If the billing and shipping countries should match. + * @param Closure $customer_closure The customer object being tested. + * @param bool $states_should_match If the billing and shipping states should match. + * @param bool $countries_should_match If the billing and shipping countries should match. */ - public function test_setting_default_address_fields( WC_Customer $customer, bool $states_should_match, bool $countries_should_match ) { + public function test_setting_default_address_fields( Closure $customer_closure, bool $states_should_match, bool $countries_should_match ) { + $customer = $customer_closure(); $session_data = new WC_Customer_Data_Store_Session(); $session_data->read( $customer ); @@ -46,66 +47,78 @@ class WC_Customer_Data_Store_Session_Test extends WC_Unit_Test_Case { * @return array[] */ public function provide_customers_with_different_addresses() { - $has_billing_address_only = new WC_Customer(); - $has_billing_address_only->set_email( 'wc-customer-test-01@test.user' ); - $has_billing_address_only->set_billing_address( '1234 Quality Lane' ); - $has_billing_address_only->set_billing_city( 'Testville' ); - $has_billing_address_only->set_billing_country( 'US' ); - $has_billing_address_only->set_billing_state( 'CA' ); - $has_billing_address_only->set_billing_postcode( '90123' ); - $has_billing_address_only->save(); + $cust1_closure = function () { + $has_billing_address_only = new WC_Customer(); + $has_billing_address_only->set_email( 'wc-customer-test-01@test.user' ); + $has_billing_address_only->set_billing_address( '1234 Quality Lane' ); + $has_billing_address_only->set_billing_city( 'Testville' ); + $has_billing_address_only->set_billing_country( 'US' ); + $has_billing_address_only->set_billing_state( 'CA' ); + $has_billing_address_only->set_billing_postcode( '90123' ); + $has_billing_address_only->save(); + return $has_billing_address_only; + }; - $separate_billing_and_shipping_state_and_country = new WC_Customer(); - $separate_billing_and_shipping_state_and_country->set_email( 'wc-customer-test-02@test.user' ); - $separate_billing_and_shipping_state_and_country->set_billing_address( '4567 Scenario Street' ); - $separate_billing_and_shipping_state_and_country->set_billing_city( 'Unitly' ); - $separate_billing_and_shipping_state_and_country->set_billing_country( 'UK' ); - $separate_billing_and_shipping_state_and_country->set_billing_state( 'Computershire' ); - $separate_billing_and_shipping_state_and_country->set_billing_postcode( 'ZX1 2PQ' ); - $separate_billing_and_shipping_state_and_country->set_shipping_address( '8901 Situation Court' ); - $separate_billing_and_shipping_state_and_country->set_shipping_city( 'Endtoendly' ); - $separate_billing_and_shipping_state_and_country->set_shipping_country( 'CA' ); - $separate_billing_and_shipping_state_and_country->set_shipping_state( 'BC' ); - $separate_billing_and_shipping_state_and_country->set_shipping_postcode( 'A1B 2C3' ); - $separate_billing_and_shipping_state_and_country->save(); + $cust2_closure = function () { + $separate_billing_and_shipping_state_and_country = new WC_Customer(); + $separate_billing_and_shipping_state_and_country->set_email( 'wc-customer-test-02@test.user' ); + $separate_billing_and_shipping_state_and_country->set_billing_address( '4567 Scenario Street' ); + $separate_billing_and_shipping_state_and_country->set_billing_city( 'Unitly' ); + $separate_billing_and_shipping_state_and_country->set_billing_country( 'UK' ); + $separate_billing_and_shipping_state_and_country->set_billing_state( 'Computershire' ); + $separate_billing_and_shipping_state_and_country->set_billing_postcode( 'ZX1 2PQ' ); + $separate_billing_and_shipping_state_and_country->set_shipping_address( '8901 Situation Court' ); + $separate_billing_and_shipping_state_and_country->set_shipping_city( 'Endtoendly' ); + $separate_billing_and_shipping_state_and_country->set_shipping_country( 'CA' ); + $separate_billing_and_shipping_state_and_country->set_shipping_state( 'BC' ); + $separate_billing_and_shipping_state_and_country->set_shipping_postcode( 'A1B 2C3' ); + $separate_billing_and_shipping_state_and_country->save(); + return $separate_billing_and_shipping_state_and_country; + }; - $separate_billing_state_same_country = new WC_Customer(); - $separate_billing_state_same_country->set_email( 'wc-customer-test-03@test.user' ); - $separate_billing_state_same_country->set_billing_address( '4567 Scenario Street' ); - $separate_billing_state_same_country->set_billing_city( 'Unitly' ); - $separate_billing_state_same_country->set_billing_country( 'UK' ); - $separate_billing_state_same_country->set_billing_state( 'Computershire' ); - $separate_billing_state_same_country->set_billing_postcode( 'ZX1 2PQ' ); - $separate_billing_state_same_country->set_shipping_address( '8901 Situation Court' ); - $separate_billing_state_same_country->set_shipping_city( 'Endtoendly' ); - $separate_billing_state_same_country->set_shipping_country( 'UK' ); - $separate_billing_state_same_country->set_shipping_state( 'Byteshire' ); - $separate_billing_state_same_country->set_shipping_postcode( 'RS1 2TU' ); - $separate_billing_state_same_country->save(); + $cust3_closure = function () { + $separate_billing_state_same_country = new WC_Customer(); + $separate_billing_state_same_country->set_email( 'wc-customer-test-03@test.user' ); + $separate_billing_state_same_country->set_billing_address( '4567 Scenario Street' ); + $separate_billing_state_same_country->set_billing_city( 'Unitly' ); + $separate_billing_state_same_country->set_billing_country( 'UK' ); + $separate_billing_state_same_country->set_billing_state( 'Computershire' ); + $separate_billing_state_same_country->set_billing_postcode( 'ZX1 2PQ' ); + $separate_billing_state_same_country->set_shipping_address( '8901 Situation Court' ); + $separate_billing_state_same_country->set_shipping_city( 'Endtoendly' ); + $separate_billing_state_same_country->set_shipping_country( 'UK' ); + $separate_billing_state_same_country->set_shipping_state( 'Byteshire' ); + $separate_billing_state_same_country->set_shipping_postcode( 'RS1 2TU' ); + $separate_billing_state_same_country->save(); + return $separate_billing_state_same_country; + }; - $shipping_address_is_effectively_empty = new WC_Customer(); - $shipping_address_is_effectively_empty->set_email( 'wc-customer-test-04@test.user' ); - $shipping_address_is_effectively_empty->set_shipping_address( ' ' ); - $shipping_address_is_effectively_empty->save(); + $cust4_closure = function () { + $shipping_address_is_effectively_empty = new WC_Customer(); + $shipping_address_is_effectively_empty->set_email( 'wc-customer-test-04@test.user' ); + $shipping_address_is_effectively_empty->set_shipping_address( ' ' ); + $shipping_address_is_effectively_empty->save(); + return $shipping_address_is_effectively_empty; + }; return array( 'has_billing_address_only' => array( - $has_billing_address_only, + $cust1_closure, true, true, ), 'separate_billing_and_shipping_state_and_country' => array( - $separate_billing_and_shipping_state_and_country, + $cust2_closure, false, false, ), 'separate_billing_state_same_country' => array( - $separate_billing_state_same_country, + $cust3_closure, false, true, ), 'shipping_address_is_effectively_empty' => array( - $shipping_address_is_effectively_empty, + $cust4_closure, true, true, ), diff --git a/plugins/woocommerce/tests/php/includes/data-stores/class-wc-order-data-store-cpt-test.php b/plugins/woocommerce/tests/php/includes/data-stores/class-wc-order-data-store-cpt-test.php index 011a0bdf776..4fb6bd7132c 100644 --- a/plugins/woocommerce/tests/php/includes/data-stores/class-wc-order-data-store-cpt-test.php +++ b/plugins/woocommerce/tests/php/includes/data-stores/class-wc-order-data-store-cpt-test.php @@ -1,9 +1,40 @@ prev_cot_state = OrderUtil::custom_orders_table_usage_is_enabled(); + OrderHelper::toggle_cot( false ); + } + + /** + * Restore the COT state after the test. + * + * @return void + */ + public function tearDown(): void { + OrderHelper::toggle_cot( $this->prev_cot_state ); + parent::tearDown(); + } /** * Test that refund cache are invalidated correctly when refund is deleted. @@ -131,7 +162,7 @@ class WC_Order_Data_Store_CPT_Test extends WC_Unit_Test_Case { * Legacy getters and setters for props migrated from data stores should be set/reset properly. */ public function test_legacy_getters_setters() { - $order_id = \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::create_complex_wp_post_order(); + $order_id = OrderHelper::create_complex_wp_post_order(); $order = wc_get_order( $order_id ); $bool_props = array( '_download_permissions_granted' => 'download_permissions_granted', diff --git a/plugins/woocommerce/tests/php/includes/gateways/paypal/class-wc-gateway-paypal-test.php b/plugins/woocommerce/tests/php/includes/gateways/paypal/class-wc-gateway-paypal-test.php index 7f319dc4181..4f26bdfad79 100644 --- a/plugins/woocommerce/tests/php/includes/gateways/paypal/class-wc-gateway-paypal-test.php +++ b/plugins/woocommerce/tests/php/includes/gateways/paypal/class-wc-gateway-paypal-test.php @@ -29,8 +29,8 @@ class WC_Gateway_Paypal_Test extends \WC_Unit_Test_Case { $order = WC_Helper_Order::create_order(); $order->save(); - update_post_meta( $order->get_id(), '_paypal_status', 'pending' ); - update_post_meta( $order->get_id(), '_transaction_id', $this->transaction_id_26960 ); + $order->update_meta_data( '_paypal_status', 'pending' ); + $order->set_transaction_id( $this->transaction_id_26960 ); $order->set_payment_method( 'paypal' ); $order->save(); @@ -56,8 +56,8 @@ class WC_Gateway_Paypal_Test extends \WC_Unit_Test_Case { $order = WC_Helper_Order::create_order(); $order->save(); - update_post_meta( $order->get_id(), '_paypal_status', 'pending' ); - update_post_meta( $order->get_id(), '_transaction_id', $this->transaction_id_26960 ); + $order->update_meta_data( '_paypal_status', 'pending' ); + $order->set_transaction_id( $this->transaction_id_26960 ); $order->set_payment_method( 'paypal' ); $order->save(); diff --git a/plugins/woocommerce/tests/php/includes/wc-product-functions-test.php b/plugins/woocommerce/tests/php/includes/wc-product-functions-test.php index 2a68d98f8c2..1dcba8d1356 100644 --- a/plugins/woocommerce/tests/php/includes/wc-product-functions-test.php +++ b/plugins/woocommerce/tests/php/includes/wc-product-functions-test.php @@ -128,4 +128,73 @@ class WC_Product_Functions_Tests extends \WC_Unit_Test_Case { remove_filter( 'woocommerce_adjust_non_base_location_prices', '__return_false' ); } } + + /** + * @testdox Test 'wc_get_price_including_tax'. + * + * @testWith [true, true] + * [true, false] + * [false, true] + * [false, false] + * + * @param bool $prices_include_tax Whether entered prices are inclusive of tax. + * @param bool $is_vat_exempt Whether the VAT is exempted for customer. + */ + public function test_wc_get_price_including_tax( $prices_include_tax, $is_vat_exempt ) { + // Set VAT exempt and Mock prices_include_tax. + WC()->customer->set_is_vat_exempt( $is_vat_exempt ); + FunctionsMockerHack::add_function_mocks( + array( + 'wc_prices_include_tax' => $prices_include_tax ? '__return_true' : '__return_false', + ) + ); + + // Add dummy tax-rate. + $tax_rate = array( + 'tax_rate_country' => '', + 'tax_rate_state' => '', + 'tax_rate' => '20.0000', + 'tax_rate_name' => 'VAT', + 'tax_rate_priority' => '1', + 'tax_rate_compound' => '0', + 'tax_rate_shipping' => '1', + 'tax_rate_order' => '1', + 'tax_rate_class' => '', + ); + $tax_rate_id = WC_Tax::_insert_tax_rate( $tax_rate ); + + $wc_tax_enabled = wc_tax_enabled(); + if ( ! $wc_tax_enabled ) { + update_option( 'woocommerce_calc_taxes', 'yes' ); + } + + $product = WC_Helper_Product::create_simple_product(); + $expected_prices = array( + '10' => array( 8.33, 10, 10, 12 ), + '50' => array( 41.67, 50, 50, 60 ), + '100' => array( 83.33, 100, 100, 120 ), + ); + + foreach ( $expected_prices as $price => $value ) { + $product->set_price( $price ); + $product->save(); + if ( $prices_include_tax && $is_vat_exempt ) { + $this->assertEquals( $value[0], wc_get_price_including_tax( $product ) ); + } elseif ( $prices_include_tax && ! $is_vat_exempt ) { + $this->assertEquals( $value[1], wc_get_price_including_tax( $product ) ); + } elseif ( ! $prices_include_tax && $is_vat_exempt ) { + $this->assertEquals( $value[2], wc_get_price_including_tax( $product ) ); + } elseif ( ! $prices_include_tax && ! $is_vat_exempt ) { + $this->assertEquals( $value[3], wc_get_price_including_tax( $product ) ); + } + } + + // Test clean up. + WC()->customer->set_is_vat_exempt( false ); + WC_Tax::_delete_tax_rate( $tax_rate_id ); + WC_Helper_Product::delete_product( $product->get_id() ); + if ( ! $wc_tax_enabled ) { + update_option( 'woocommerce_calc_taxes', 'no' ); + } + } } diff --git a/plugins/woocommerce/tests/php/src/Caching/OrderCacheTest.php b/plugins/woocommerce/tests/php/src/Caching/OrderCacheTest.php new file mode 100644 index 00000000000..cd165a223a3 --- /dev/null +++ b/plugins/woocommerce/tests/php/src/Caching/OrderCacheTest.php @@ -0,0 +1,51 @@ +sut = new OrderCache(); + } + + /** + * Test that the order cache does not cause duplicate data storage. + */ + public function test_meta_is_not_duplicated_when_cached() { + global $wpdb; + if ( ! OrderUtil::orders_cache_usage_is_enabled() ) { + // tip: add HPOS=1 env variable to run this test. + $this->markTestSkipped( 'HPOS based caching is not enabled.' ); + } + $order = WC_Helper_Order::create_order(); + $order->add_meta_data( 'test', 'test' ); + $order->save_meta_data(); + + $order = wc_get_order( $order->get_id() ); + $this->assertTrue( $this->sut->is_cached( $order->get_id() ), 'Order was not cached, but it was expected to be cached. Are you sure that HPOS based caching is enabled.' ); + + $order2 = wc_get_order( $order->get_id() ); + $order2->save_meta_data(); + + $orders_meta_table = OrdersTableDataStore::get_meta_table_name(); + $query = $wpdb->prepare( "SELECT id FROM $orders_meta_table WHERE order_id = %d AND meta_key = %s", $order->get_id(), 'test' ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $this->assertEquals( 1, count( $wpdb->get_col( $query ) ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- Already prepared query. + } + +} diff --git a/plugins/woocommerce/tests/php/src/Internal/DataStores/Orders/OrdersTableDataStoreTests.php b/plugins/woocommerce/tests/php/src/Internal/DataStores/Orders/OrdersTableDataStoreTests.php index 47538063371..913f40bc591 100644 --- a/plugins/woocommerce/tests/php/src/Internal/DataStores/Orders/OrdersTableDataStoreTests.php +++ b/plugins/woocommerce/tests/php/src/Internal/DataStores/Orders/OrdersTableDataStoreTests.php @@ -7,6 +7,7 @@ use Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore; use Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableQuery; use Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper; use Automattic\WooCommerce\RestApi\UnitTests\HPOSToggleTrait; +use Automattic\WooCommerce\Utilities\OrderUtil; require_once __DIR__ . '/../../../../helpers/HPOSToggleTrait.php'; @@ -39,6 +40,12 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { */ private $cpt_data_store; + /** + * Whether COT was enabled before the test. + * @var bool + */ + private $cot_state; + /** * Initializes system under test. */ @@ -49,6 +56,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { parent::setUp(); // Remove the Test Suite’s use of temporary tables https://wordpress.stackexchange.com/a/220308. $this->setup_cot(); + $this->cot_state = OrderUtil::custom_orders_table_usage_is_enabled(); $this->toggle_cot( false ); $this->sut = wc_get_container()->get( OrdersTableDataStore::class ); $this->migrator = wc_get_container()->get( PostsToOrdersMigrationController::class ); @@ -61,6 +69,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { public function tearDown(): void { //phpcs:ignore WordPress.DateTime.RestrictedFunctions.timezone_change_date_default_timezone_set -- We need to change the timezone to test the date sync fields. update_option( 'timezone_string', $this->original_time_zone ); + $this->toggle_cot( $this->cot_state ); $this->clean_up_cot_setup(); parent::tearDown(); } @@ -207,6 +216,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { wp_cache_flush(); $order = new WC_Order(); $order->set_id( $post_order->get_id() ); + $this->toggle_cot( true ); $this->switch_data_store( $order, $this->sut ); $this->sut->read( $order ); @@ -241,6 +251,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { foreach ( $datastore_updates as $prop => $value ) { $this->assertEquals( $value, $this->sut->{"get_$prop"}( $order ), "Unable to match prop $prop" ); } + $this->toggle_cot( false ); } /** @@ -1769,6 +1780,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { * Ideally, this should be possible only from getters and setters for objects, but for backward compatibility, earlier ways are also supported. */ public function test_internal_ds_getters_and_setters() { + $this->toggle_cot( true ); $props_to_test = array( '_download_permissions_granted', '_recorded_sales', @@ -1815,6 +1827,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { $order->save(); } $this->assert_get_prop_via_ds_object_and_metadata( $props_to_test, $order, false, $ds_getter_setter_names ); + $this->toggle_cot( false ); } /** @@ -1857,7 +1870,8 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { * @testDox Legacy getters and setters for props migrated from data stores should be set/reset properly. */ public function test_legacy_getters_setters() { - $order_id = \Automattic\WooCommerce\RestApi\UnitTests\Helpers\OrderHelper::create_complex_wp_post_order(); + $this->toggle_cot( true ); + $order_id = OrderHelper::create_complex_data_store_order( $this->sut ); $order = wc_get_order( $order_id ); $this->switch_data_store( $order, $this->sut ); $bool_props = array( @@ -1889,7 +1903,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { $this->assert_props_value_via_data_store( $order, $bool_props, true ); $this->assert_props_value_via_order_object( $order, $bool_props, true ); - + $this->toggle_cot( false ); } /** @@ -1986,8 +2000,9 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { */ public function test_read_multiple_dont_sync_again_for_same_order() { $this->toggle_cot( true ); - $this->enable_cot_sync(); $order = $this->create_complex_cot_order(); + $this->sut->backfill_post_record( $order ); + $this->enable_cot_sync(); $order_id = $order->get_id(); @@ -2001,6 +2016,7 @@ class OrdersTableDataStoreTests extends WC_Unit_Test_Case { $this->assertTrue( $should_sync_callable->call( $this->sut, $order ) ); $this->sut->read_multiple( $orders ); $this->assertFalse( $should_sync_callable->call( $this->sut, $order ) ); + $this->toggle_cot( false ); } /** diff --git a/plugins/woocommerce/woocommerce.php b/plugins/woocommerce/woocommerce.php index 5fb548b0296..5ad4922ff91 100644 --- a/plugins/woocommerce/woocommerce.php +++ b/plugins/woocommerce/woocommerce.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce * Plugin URI: https://woocommerce.com/ * Description: An eCommerce toolkit that helps you sell anything. Beautifully. - * Version: 7.6.0-dev + * Version: 7.7.0-dev * Author: Automattic * Author URI: https://woocommerce.com * Text Domain: woocommerce diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da1d960b61a..18ea03d060e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,7 +38,7 @@ importers: sass: ^1.49.9 sass-loader: ^10.2.1 syncpack: ^9.8.4 - turbo: ^1.7.0 + turbo: ^1.8.3 typescript: ^4.8.3 url-loader: ^1.1.2 webpack: ^5.70.0 @@ -76,7 +76,7 @@ importers: sass: 1.49.9 sass-loader: 10.2.1_sass@1.49.9+webpack@5.70.0 syncpack: 9.8.4 - turbo: 1.7.0 + turbo: 1.8.3 typescript: 4.8.4 url-loader: 1.1.2_webpack@5.70.0 webpack: 5.70.0 @@ -150,7 +150,7 @@ importers: webpack-cli: ^3.3.12 dependencies: '@woocommerce/components': link:../components - '@wordpress/components': 19.8.5_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/element': 4.4.1 devDependencies: '@types/react': 17.0.50 @@ -166,7 +166,7 @@ importers: react: 17.0.2 react-dom: 17.0.2_react@17.0.2 sass-loader: 10.2.1_webpack@5.70.0 - ts-jest: 27.1.3_77oryishcckaigojnzbhxsiona + ts-jest: 27.1.3_hszvtzkxfg7axc55y33g3o6iwa typescript: 4.8.4 webpack: 5.70.0_webpack-cli@3.3.12 webpack-cli: 3.3.12_webpack@5.70.0 @@ -201,7 +201,7 @@ importers: axios-mock-adapter: 1.20.0_axios@0.24.0 eslint: 8.32.0 jest: 27.5.1 - ts-jest: 27.1.3_wfmhell6c5i72vvtgtvpmkkb6i + ts-jest: 27.1.3_n6jwe674nt3ravnkwja2moplpy typescript: 4.8.4 packages/js/api-core-tests: @@ -523,6 +523,7 @@ importers: '@woocommerce/experimental': workspace:* '@woocommerce/internal-style-build': workspace:* '@woocommerce/navigation': workspace:* + '@woocommerce/tracks': workspace:* '@wordpress/browserslist-config': wp-6.0 '@wordpress/components': wp-6.0 '@wordpress/compose': wp-6.0 @@ -550,7 +551,7 @@ importers: webpack-cli: ^3.3.12 dependencies: '@woocommerce/experimental': link:../experimental - '@wordpress/components': 19.8.5_rysvg2ttzfworbkpz2ftlx73d4 + '@wordpress/components': 19.8.5_ivjkhzvx5dt6opkkf6frl2zoam '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/data': 6.6.1_react@17.0.2 '@wordpress/element': 4.4.1 @@ -559,20 +560,21 @@ importers: classnames: 2.3.1 prop-types: 15.8.1 react: 17.0.2 - react-dom: 16.14.0_react@17.0.2 - react-transition-group: 4.4.2_prpqlkd37azqwypxturxi7uyci + react-dom: 17.0.2_react@17.0.2 + react-transition-group: 4.4.2_sfoxds7t5ydpegc3knd667wn6m devDependencies: '@babel/core': 7.17.8 - '@testing-library/react': 12.1.4_prpqlkd37azqwypxturxi7uyci + '@testing-library/react': 12.1.4_sfoxds7t5ydpegc3knd667wn6m '@types/jest': 27.4.1 '@types/prop-types': 15.7.4 '@types/testing-library__jest-dom': 5.14.3 - '@types/wordpress__components': 19.10.5_prpqlkd37azqwypxturxi7uyci + '@types/wordpress__components': 19.10.5_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__data': 6.0.0 '@woocommerce/data': link:../data '@woocommerce/eslint-plugin': link:../eslint-plugin '@woocommerce/internal-style-build': link:../internal-style-build '@woocommerce/navigation': link:../navigation + '@woocommerce/tracks': link:../tracks '@wordpress/browserslist-config': 4.1.3 concurrently: 7.0.0 css-loader: 3.6.0_webpack@5.70.0 @@ -608,6 +610,7 @@ importers: '@woocommerce/date': workspace:* '@woocommerce/eslint-plugin': workspace:* '@woocommerce/navigation': workspace:* + '@woocommerce/tracks': workspace:* '@wordpress/api-fetch': wp-6.0 '@wordpress/compose': wp-6.0 '@wordpress/core-data': wp-6.0 @@ -635,6 +638,7 @@ importers: dependencies: '@woocommerce/date': link:../date '@woocommerce/navigation': link:../navigation + '@woocommerce/tracks': link:../tracks '@wordpress/api-fetch': 6.3.1 '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/core-data': 4.4.5_react@17.0.2 @@ -1117,7 +1121,7 @@ importers: typescript: ^4.8.3 dependencies: '@testing-library/jest-dom': 5.16.2 - '@testing-library/react': 12.1.4_6l5554ty5ajsajah6yazvrjhoe + '@testing-library/react': 12.1.4_sfoxds7t5ydpegc3knd667wn6m '@wordpress/data': 6.6.1_react@17.0.2 '@wordpress/i18n': 4.6.1 '@wordpress/jest-console': 5.0.2_jest@27.5.1 @@ -1186,6 +1190,7 @@ importers: '@wordpress/compose': wp-6.0 '@wordpress/element': wp-6.0 '@wordpress/hooks': wp-6.0 + '@wordpress/i18n': wp-6.0 '@wordpress/notices': wp-6.0 '@wordpress/url': wp-6.0 eslint: ^8.32.0 @@ -1204,6 +1209,7 @@ importers: '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/element': 4.4.1 '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 '@wordpress/notices': 3.6.1_react@17.0.2 '@wordpress/url': 3.7.1 history: 5.3.0 @@ -1359,9 +1365,16 @@ importers: packages/js/product-editor: specifiers: '@automattic/interpolate-components': ^1.2.0 + '@babel/core': ^7.21.3 + '@babel/runtime': ^7.17.2 + '@testing-library/jest-dom': ^5.16.2 '@testing-library/react': ^12.1.3 + '@testing-library/react-hooks': ^8.0.1 + '@testing-library/user-event': ^13.5.0 + '@types/jest': ^27.4.1 '@types/lodash': ^4.14.179 '@types/react': ^17.0.2 + '@types/testing-library__jest-dom': ^5.14.3 '@types/wordpress__block-editor': ^7.0.0 '@types/wordpress__block-library': ^2.6.1 '@types/wordpress__blocks': ^11.0.7 @@ -1377,6 +1390,7 @@ importers: '@woocommerce/internal-style-build': workspace:* '@woocommerce/navigation': workspace:^8.1.0 '@woocommerce/number': workspace:* + '@woocommerce/settings': ^1.0.0 '@woocommerce/tracks': workspace:^1.3.0 '@wordpress/block-editor': ^9.8.0 '@wordpress/blocks': ^12.3.0 @@ -1422,19 +1436,20 @@ importers: '@woocommerce/data': link:../data '@woocommerce/navigation': link:../navigation '@woocommerce/number': link:../number + '@woocommerce/settings': 1.0.0 '@woocommerce/tracks': link:../tracks - '@wordpress/block-editor': 9.8.0_vcke6catv4iqpjdw24uwvlzyyi + '@wordpress/block-editor': 9.8.0_mtk4wljkd5jimhszw4p7nnxuzm '@wordpress/blocks': 12.5.0_react@17.0.2 - '@wordpress/components': 19.8.5_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/core-data': 4.4.5_react@17.0.2 '@wordpress/data': 6.6.1_react@17.0.2 - '@wordpress/editor': 12.5.10_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/editor': 12.5.10_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/element': 4.4.1 '@wordpress/html-entities': 3.6.1 '@wordpress/i18n': 4.6.1 '@wordpress/icons': 8.2.3 - '@wordpress/interface': 4.5.6_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/interface': 4.5.6_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/keyboard-shortcuts': 3.4.1_react@17.0.2 '@wordpress/media-utils': 3.4.1 '@wordpress/url': 3.7.1 @@ -1442,8 +1457,15 @@ importers: lodash: 4.17.21 react-router-dom: 6.3.0_sfoxds7t5ydpegc3knd667wn6m devDependencies: + '@babel/core': 7.21.3 + '@babel/runtime': 7.19.0 + '@testing-library/jest-dom': 5.16.2 '@testing-library/react': 12.1.4_sfoxds7t5ydpegc3knd667wn6m + '@testing-library/react-hooks': 8.0.1_hiunvzosbwliizyirxfy6hjyim + '@testing-library/user-event': 13.5.0_gzufz4q333be4gqfrvipwvqt6a + '@types/jest': 27.4.1 '@types/react': 17.0.50 + '@types/testing-library__jest-dom': 5.14.3 '@types/wordpress__block-editor': 7.0.0_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__block-library': 2.6.1 '@types/wordpress__components': 19.10.5_sfoxds7t5ydpegc3knd667wn6m @@ -1466,7 +1488,7 @@ importers: react-hooks^8.0.1: link:@testing-library/react-hooks^8.0.1 rimraf: 3.0.2 sass-loader: 10.2.1_webpack@5.70.0 - ts-jest: 27.1.3_77oryishcckaigojnzbhxsiona + ts-jest: 27.1.3_n6jwe674nt3ravnkwja2moplpy typescript: 4.8.4 webpack: 5.70.0_webpack-cli@3.3.12 webpack-cli: 3.3.12_webpack@5.70.0 @@ -1608,6 +1630,7 @@ importers: '@babel/preset-typescript': ^7.16.7 '@babel/runtime': ^7.17.2 '@octokit/core': ^3.5.1 + '@pmmmwh/react-refresh-webpack-plugin': ^0.5.10 '@react-spring/web': ^9.4.3 '@testing-library/dom': ^8.11.3 '@testing-library/jest-dom': ^5.16.2 @@ -1745,6 +1768,7 @@ importers: raw-loader: ^4.0.2 react: ^17.0.2 react-dom: ^17.0.2 + react-refresh: ^0.14.0 react-router-dom: ^6.3.0 react-transition-group: ^4.4.2 react-visibility-sensor: ^5.1.1 @@ -1763,6 +1787,7 @@ importers: webpack: ^5.70.0 webpack-bundle-analyzer: ^3.9.0 webpack-cli: ^4.9.2 + webpack-dev-server: ^4.11.1 webpack-fix-style-only-entries: ^0.6.1 webpack-merge: ^5.8.0 webpack-rtl-plugin: ^2.0.0 @@ -1830,6 +1855,7 @@ importers: '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 '@babel/runtime': 7.17.7 '@octokit/core': 3.5.1 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_kgzwhhiezcyg2m3alqq7chac3a '@testing-library/dom': 8.11.3 '@testing-library/jest-dom': 5.16.2 '@testing-library/react': 12.1.4_sfoxds7t5ydpegc3knd667wn6m @@ -1924,6 +1950,7 @@ importers: prop-types: 15.8.1 puppeteer: 2.1.1 raw-loader: 4.0.2_webpack@5.70.0 + react-refresh: 0.14.0 readline-sync: 1.4.10 replace: 1.2.1 rimraf: 3.0.2 @@ -1937,7 +1964,8 @@ importers: url-loader: 1.1.2_webpack@5.70.0 webpack: 5.70.0_webpack-cli@4.9.2 webpack-bundle-analyzer: 3.9.0 - webpack-cli: 4.9.2_wbg6qaiqcwsayvtung7xs6mhka + webpack-cli: 4.9.2_ciq5cijsysjq5sik752b4nyq2m + webpack-dev-server: 4.12.0_jaxrlecucqtr54lmhmx67obzmy webpack-fix-style-only-entries: 0.6.1 webpack-merge: 5.8.0 webpack-rtl-plugin: 2.0.0 @@ -1972,12 +2000,12 @@ importers: typescript: ^4.8.3 uglify-js: ^3.5.3 dependencies: - '@emotion/react': 11.10.5_lvgioobbs7lf3pr6y4xfpughau + '@emotion/react': 11.10.5_zg7wlf5auq2m3ro2gp4uufjvme '@types/prop-types': 15.7.4 '@woocommerce/components': link:../../packages/js/components '@woocommerce/data': link:../../packages/js/data '@wordpress/api-fetch': 6.3.1 - '@wordpress/components': 19.8.5_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/data': 6.6.1_react@17.0.2 '@wordpress/data-controls': 2.6.1_react@17.0.2 @@ -1994,7 +2022,7 @@ importers: '@woocommerce/eslint-plugin': link:../../packages/js/eslint-plugin '@wordpress/env': 4.9.0 '@wordpress/prettier-config': 2.5.0_wp-prettier@2.6.2 - '@wordpress/scripts': 19.2.4_f7x7zdz3ccrnqxb4utvdtwqz4e + '@wordpress/scripts': 19.2.4_ew4zquq24ctm7afg5tumlrriou eslint: 8.32.0 prettier: /wp-prettier/2.6.2 ts-loader: 9.4.1_27qmdvvfdw5s3nqwnln6yerdsa @@ -2199,6 +2227,7 @@ importers: commander: 9.4.0 dotenv: ^10.0.0 ejs: ^3.1.8 + enquirer: ^2.3.6 express: ^4.18.1 form-data: ^4.0.0 lodash.shuffle: ^4.2.0 @@ -2215,6 +2244,7 @@ importers: commander: 9.4.0 dotenv: 10.0.0 ejs: 3.1.8 + enquirer: 2.3.6 express: 4.18.1 form-data: 4.0.0 lodash.shuffle: 4.2.0 @@ -2261,10 +2291,10 @@ importers: typescript: ^4.8.3 webpack: ^5.70.0 dependencies: - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 + '@babel/preset-typescript': 7.16.7_@babel+core@7.21.3 devDependencies: - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/preset-env': 7.16.11_@babel+core@7.17.8 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/preset-env': 7.16.11_@babel+core@7.21.3 '@babel/runtime': 7.17.7 '@storybook/addon-a11y': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/addon-actions': 6.4.19_sfoxds7t5ydpegc3knd667wn6m @@ -2281,7 +2311,7 @@ importers: '@storybook/components': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/core-events': 6.4.19 '@storybook/manager-webpack5': 6.4.19_3n4gsnmxucj3bywv6syggoiztm - '@storybook/react': 6.4.19_a55upwwpdj22rf6pemjk4qxjbi + '@storybook/react': 6.4.19_eyy24cwvfyikqccjc6kc5n6u7q '@storybook/theming': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@woocommerce/eslint-plugin': link:../../packages/js/eslint-plugin react: 17.0.2 @@ -2335,7 +2365,14 @@ packages: resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.16 + '@jridgewell/trace-mapping': 0.3.17 + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 /@automattic/calypso-color-schemes/2.1.1: resolution: {integrity: sha512-X5gmQEDJVtw8N9NARgZGM/pmalfapV8ZyRzEn2o0sCLmTAXGYg6A28ucLCQdBIn1l9t2rghBDFkY71vyqjyyFQ==} @@ -2638,6 +2675,28 @@ packages: optionalDependencies: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.5.3 + dev: true + + /@babel/cli/7.17.6_@babel+core@7.21.3: + resolution: {integrity: sha512-l4w608nsDNlxZhiJ5tE3DbNmr61fIKMZ6fTBo171VEFuFMIYuJ3mHRhTLEkKKyvx2Mizkkv/0a8OJOnZqkKYNA==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@jridgewell/trace-mapping': 0.3.16 + commander: 4.1.1 + convert-source-map: 1.8.0 + fs-readdir-recursive: 1.1.0 + glob: 7.2.0 + make-dir: 2.1.0 + slash: 2.0.0 + source-map: 0.5.7 + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 + chokidar: 3.5.3 + dev: false /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} @@ -2664,11 +2723,16 @@ packages: /@babel/compat-data/7.17.7: resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} engines: {node: '>=6.9.0'} + dev: true /@babel/compat-data/7.19.3: resolution: {integrity: sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==} engines: {node: '>=6.9.0'} + /@babel/compat-data/7.21.0: + resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} + engines: {node: '>=6.9.0'} + /@babel/core/7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} @@ -2697,18 +2761,18 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.3 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.16.12 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helpers': 7.17.8 - '@babel/parser': 7.19.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/generator': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 convert-source-map: 1.8.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.0 + json5: 2.2.3 semver: 6.3.0 source-map: 0.5.7 transitivePeerDependencies: @@ -2737,6 +2801,28 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core/7.21.3: + resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + /@babel/eslint-parser/7.17.0_45t77ya3ofqya5ogk4q6xdzcpq: resolution: {integrity: sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -2765,14 +2851,14 @@ packages: semver: 6.3.0 dev: true - /@babel/eslint-parser/7.17.0_xujkgafwcpm5gwokncqwvv5ure: + /@babel/eslint-parser/7.17.0_xrfyhdkbwxl52yb52lr5ltkqvm: resolution: {integrity: sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': '>=7.11.0' eslint: ^7.5.0 || ^8.0.0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 eslint: 7.32.0 eslint-scope: 5.1.1 eslint-visitor-keys: 2.1.0 @@ -2791,34 +2877,44 @@ packages: resolution: {integrity: sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 + /@babel/generator/7.21.3: + resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.3 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + /@babel/helper-annotate-as-pure/7.16.0: resolution: {integrity: sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-annotate-as-pure/7.16.7: resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 + dev: true /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-compilation-targets/7.16.3_@babel+core@7.12.9: resolution: {integrity: sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==} @@ -2829,120 +2925,87 @@ packages: '@babel/compat-data': 7.19.3 '@babel/core': 7.12.9 '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 + browserslist: 4.19.3 semver: 6.3.0 - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.12.9: + /@babel/helper-compilation-targets/7.17.7_@babel+core@7.21.3: resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.12.9 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 '@babel/helper-validator-option': 7.18.6 browserslist: 4.19.3 semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.16.12: - resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.16.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.19.3 - semver: 6.3.0 - dev: false - - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.8: - resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.17.8 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.19.3 - semver: 6.3.0 - dev: true - - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.12.9: - resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.12.9 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.16.12: - resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.16.12 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - dev: false - /@babel/helper-compilation-targets/7.19.3_@babel+core@7.17.8: resolution: {integrity: sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 semver: 6.3.0 - /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.12.9: - resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.12.9: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.18.9 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + lru-cache: 5.1.1 + semver: 6.3.0 + + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.16.12: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.16.12 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: false + + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.17.8: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.17.8 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + lru-cache: 5.1.1 + semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.16.12: - resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.3: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.16.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.18.9 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - transitivePeerDependencies: - - supports-color - dev: false + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + lru-cache: 5.1.1 + semver: 6.3.0 /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.17.8: resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} @@ -2953,7 +3016,7 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -2961,6 +3024,24 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.21.3: + resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.18.9 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.12.9: resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} engines: {node: '>=6.9.0'} @@ -2970,7 +3051,7 @@ packages: '@babel/core': 7.12.9 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -2987,7 +3068,7 @@ packages: '@babel/core': 7.16.12 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.19.1 @@ -3005,6 +3086,23 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.18.9 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + transitivePeerDependencies: + - supports-color + + /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.21.3: + resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 @@ -3043,6 +3141,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.2.1 + dev: true + + /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.21.3: + resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.2.1 /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.17.8: resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} @@ -3050,10 +3159,28 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 - '@babel/traverse': 7.19.3 + '@babel/traverse': 7.21.3 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.21.3: + resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/traverse': 7.21.3 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.1 @@ -3068,7 +3195,7 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -3083,7 +3210,7 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.16.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 '@babel/helper-plugin-utils': 7.19.0 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -3099,7 +3226,23 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 + '@babel/helper-plugin-utils': 7.19.0 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.3: + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -3116,44 +3259,52 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-function-name/7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/types': 7.21.3 + + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.21.3 /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-member-expression-to-functions/7.18.9: resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-module-imports/7.16.0: resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-module-imports/7.16.7: resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 + dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-module-transforms/7.17.7: resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} @@ -3164,9 +3315,9 @@ packages: '@babel/helper-simple-access': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3179,9 +3330,24 @@ packages: '@babel/helper-simple-access': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + transitivePeerDependencies: + - supports-color + + /@babel/helper-module-transforms/7.21.2: + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} + engines: {node: '>=6.9.0'} + 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.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3189,7 +3355,7 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-plugin-utils/7.10.4: resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} @@ -3213,7 +3379,7 @@ packages: dependencies: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3223,9 +3389,10 @@ packages: dependencies: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.12.9: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} @@ -3237,7 +3404,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3251,7 +3418,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color dev: false @@ -3266,7 +3433,22 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-wrap-function': 7.19.0 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3277,8 +3459,8 @@ packages: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-member-expression-to-functions': 7.18.9 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3286,24 +3468,34 @@ packages: resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 + + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.3 /@babel/helper-skip-transparent-expression-wrappers/7.18.9: resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/helper-string-parser/7.18.10: resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} @@ -3324,10 +3516,10 @@ packages: resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.19.0 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/helper-function-name': 7.21.0 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3335,9 +3527,19 @@ packages: resolution: {integrity: sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + transitivePeerDependencies: + - supports-color + + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 transitivePeerDependencies: - supports-color @@ -3361,11 +3563,28 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.12.9: + /@babel/parser/7.21.3: + resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.21.3 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -3373,8 +3592,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -3383,16 +3602,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -3401,10 +3610,32 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.12.9: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.12.9: + resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: @@ -3414,8 +3645,8 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.12.9 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 @@ -3426,18 +3657,6 @@ packages: '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.16.12 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} engines: {node: '>=6.9.0'} @@ -3448,6 +3667,18 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 /@babel/plugin-proposal-async-generator-functions/7.16.4_@babel+core@7.12.9: resolution: {integrity: sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==} @@ -3462,44 +3693,16 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.12.9: + /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.21.3: resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.12.9 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.9 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.16.12: - resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.16.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.12 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.17.8: - resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.8 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 transitivePeerDependencies: - supports-color dev: true @@ -3518,6 +3721,21 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.16.12: + resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.12 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.17.8: resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} engines: {node: '>=6.9.0'} @@ -3531,6 +3749,21 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.8 transitivePeerDependencies: - supports-color + dev: true + + /@babel/plugin-proposal-async-generator-functions/7.19.1_@babel+core@7.21.3: + resolution: {integrity: sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color /@babel/plugin-proposal-class-properties/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==} @@ -3544,32 +3777,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.18.9 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.18.9 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} engines: {node: '>=6.9.0'} @@ -3582,6 +3789,19 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -3594,6 +3814,19 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -3605,10 +3838,37 @@ packages: '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color + dev: true - /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.12.9: + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.21.3: resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: @@ -3620,8 +3880,8 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.16.12: - resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -3634,8 +3894,8 @@ packages: - supports-color dev: false - /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.17.8: - resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.17.8: + resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -3648,16 +3908,16 @@ packages: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.17.8: + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.8 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3 transitivePeerDependencies: - supports-color @@ -3675,6 +3935,20 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-decorators/7.16.4_@babel+core@7.21.3: + resolution: {integrity: sha512-RESBNX16eNqnBeEVR5sCJpnW0mHiNLNNvGA8PrRuK/4ZJ4TO+6bHleRUuGQYDERVySOKtOhSya/C4MIhwAMAgg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-decorators': 7.16.0_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-dynamic-import/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==} engines: {node: '>=6.9.0'} @@ -3685,9 +3959,20 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + dev: true + + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3696,8 +3981,8 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.9 dev: true - /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3707,17 +3992,6 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.16.12 dev: false - /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} @@ -3727,6 +4001,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 /@babel/plugin-proposal-export-default-from/7.16.7_@babel+core@7.12.9: resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} @@ -3747,6 +4032,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-export-default-from/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.21.3 /@babel/plugin-proposal-export-namespace-from/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==} @@ -3758,9 +4054,20 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 + dev: true + + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.12.9: + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3769,8 +4076,8 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.9 dev: true - /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3780,17 +4087,6 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.16.12 dev: false - /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.8 - dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} @@ -3800,6 +4096,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 /@babel/plugin-proposal-json-strings/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==} @@ -3811,9 +4118,20 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + dev: true + + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3822,8 +4140,8 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.9 dev: true - /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3833,17 +4151,6 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.16.12 dev: false - /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 - dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} @@ -3853,6 +4160,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 /@babel/plugin-proposal-logical-assignment-operators/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==} @@ -3864,9 +4182,20 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.9 - /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + dev: true + + /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.12.9: + resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3875,8 +4204,8 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.9 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} + /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3886,17 +4215,6 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.16.12 dev: false - /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 - dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} engines: {node: '>=6.9.0'} @@ -3906,6 +4224,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 /@babel/plugin-proposal-nullish-coalescing-operator/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==} @@ -3917,28 +4246,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.9 - dev: true - - /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.12 - dev: false - /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} engines: {node: '>=6.9.0'} @@ -3949,6 +4256,17 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 + /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + dev: true + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -3959,6 +4277,17 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.9 + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.16.12 + dev: false + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -3968,6 +4297,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 /@babel/plugin-proposal-numeric-separator/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==} @@ -3979,9 +4319,20 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.9 - /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + dev: true + + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3990,8 +4341,8 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.9 dev: true - /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4001,17 +4352,6 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.16.12 dev: false - /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.8 - dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} @@ -4021,6 +4361,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} @@ -4046,73 +4397,87 @@ packages: '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 '@babel/plugin-transform-parameters': 7.16.3_@babel+core@7.12.9 - /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.12.9: - resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.9 - dev: true - - /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.16.12: - resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.16.12 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.12 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.16.12 - dev: false - /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.17.8: resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 dev: true + /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.21.3: + resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + dev: true + /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.12.9: resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.9 + /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.16.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.16.12 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.16.12 + dev: false + /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-object-rest-spread/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 /@babel/plugin-proposal-optional-catch-binding/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==} @@ -4124,37 +4489,15 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.9 - dev: true - - /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.12 - dev: false - - /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 dev: true /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.12.9: @@ -4167,6 +4510,17 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.9 + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.16.12 + dev: false + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} @@ -4176,6 +4530,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 /@babel/plugin-proposal-optional-chaining/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==} @@ -4188,30 +4553,6 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.9 - /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.9 - dev: true - - /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.12 - dev: false - /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} engines: {node: '>=6.9.0'} @@ -4223,6 +4564,18 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 + /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + dev: true + /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.12.9: resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} engines: {node: '>=6.9.0'} @@ -4256,6 +4609,18 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 + dev: true + + /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 /@babel/plugin-proposal-private-methods/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==} @@ -4269,32 +4634,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.12.9: - resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.18.9 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.16.12: - resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.18.9 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.17.8: resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} engines: {node: '>=6.9.0'} @@ -4308,6 +4647,45 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.21.3: + resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.9 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -4319,36 +4697,19 @@ packages: '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color - - /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.12.9 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.16.12 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.16.12 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.12 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} @@ -4365,6 +4726,51 @@ packages: - supports-color dev: true + /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.9 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.12.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.12 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} engines: {node: '>=6.9.0'} @@ -4378,6 +4784,21 @@ packages: '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.8 transitivePeerDependencies: - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color /@babel/plugin-proposal-unicode-property-regex/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==} @@ -4389,36 +4810,14 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.12.9: + /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -4452,6 +4851,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.12.9: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -4477,6 +4887,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.3: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} @@ -4494,6 +4913,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.12.9: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -4519,6 +4947,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.3: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.12.9: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} @@ -4548,6 +4985,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.3: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-decorators/7.16.0_@babel+core@7.17.8: resolution: {integrity: sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g==} @@ -4559,6 +5006,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-syntax-decorators/7.16.0_@babel+core@7.21.3: + resolution: {integrity: sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -4583,6 +5040,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-export-default-from/7.16.7_@babel+core@7.12.9: resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} @@ -4601,6 +5067,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-export-default-from/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} @@ -4626,6 +5102,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-flow/7.16.7_@babel+core@7.12.9: resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} @@ -4645,13 +5130,22 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.17.8: + /@babel/plugin-syntax-flow/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + + /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.12.9: @@ -4670,6 +5164,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.3: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -4695,6 +5198,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} @@ -4753,6 +5265,15 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.12.9: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -4777,6 +5298,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.3: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} @@ -4803,6 +5333,14 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.12.9: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -4827,6 +5365,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.3: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -4852,6 +5399,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -4877,6 +5433,15 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} @@ -4903,6 +5468,14 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.3: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.12.9: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -4931,6 +5504,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.3: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.12.9: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -4959,6 +5542,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.3: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.16.12: resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} @@ -4979,6 +5572,15 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} engines: {node: '>=6.9.0'} @@ -4988,13 +5590,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.17.8: + /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-arrow-functions/7.16.0_@babel+core@7.12.9: @@ -5006,26 +5608,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} engines: {node: '>=6.9.0'} @@ -5036,6 +5618,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} engines: {node: '>=6.9.0'} @@ -5045,6 +5637,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} engines: {node: '>=6.9.0'} @@ -5053,6 +5655,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-async-to-generator/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==} @@ -5067,34 +5679,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.12.9: - resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.18.9 - '@babel/helper-remap-async-to-generator': 7.16.8 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.16.12: - resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.18.9 - '@babel/helper-remap-async-to-generator': 7.16.8 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.17.8: resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} engines: {node: '>=6.9.0'} @@ -5109,6 +5693,20 @@ packages: - supports-color dev: true + /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.21.3: + resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-remap-async-to-generator': 7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} engines: {node: '>=6.9.0'} @@ -5122,6 +5720,20 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.16.12 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} engines: {node: '>=6.9.0'} @@ -5134,6 +5746,20 @@ packages: '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.17.8 transitivePeerDependencies: - supports-color + dev: true + + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-block-scoped-functions/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==} @@ -5144,33 +5770,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5183,6 +5789,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} @@ -5191,6 +5807,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-block-scoping/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==} @@ -5201,26 +5827,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} engines: {node: '>=6.9.0'} @@ -5231,6 +5837,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.12.9: resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} engines: {node: '>=6.9.0'} @@ -5240,6 +5856,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} engines: {node: '>=6.9.0'} @@ -5248,6 +5874,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-block-scoping/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-classes/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==} @@ -5266,44 +5902,6 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-classes/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-classes/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-classes/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} engines: {node: '>=6.9.0'} @@ -5313,7 +5911,26 @@ packages: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-classes/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 @@ -5331,9 +5948,9 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 @@ -5342,6 +5959,26 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-classes/7.19.0_@babel+core@7.16.12: + resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-classes/7.19.0_@babel+core@7.17.8: resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} engines: {node: '>=6.9.0'} @@ -5350,9 +5987,29 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-classes/7.19.0_@babel+core@7.21.3: + resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 @@ -5370,33 +6027,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5409,6 +6046,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} engines: {node: '>=6.9.0'} @@ -5417,6 +6064,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-destructuring/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==} @@ -5427,26 +6084,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.12.9: - resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.16.12: - resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.17.8: resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} engines: {node: '>=6.9.0'} @@ -5457,6 +6094,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.21.3: + resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.12.9: resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} engines: {node: '>=6.9.0'} @@ -5466,6 +6113,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.16.12: + resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.17.8: resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} engines: {node: '>=6.9.0'} @@ -5474,6 +6131,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-destructuring/7.18.13_@babel+core@7.21.3: + resolution: {integrity: sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-dotall-regex/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==} @@ -5485,36 +6152,14 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5548,6 +6193,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-duplicate-keys/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==} @@ -5558,9 +6214,19 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.12.9: + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -5568,8 +6234,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5578,8 +6244,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: false - /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.17.8: + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -5588,13 +6254,13 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.17.8: + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-exponentiation-operator/7.16.0_@babel+core@7.12.9: @@ -5607,35 +6273,13 @@ packages: '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5650,6 +6294,17 @@ packages: '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} @@ -5659,6 +6314,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-flow-strip-types/7.16.7_@babel+core@7.12.9: resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} @@ -5680,6 +6346,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.17.8 + /@babel/plugin-transform-flow-strip-types/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.21.3 + /@babel/plugin-transform-for-of/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==} engines: {node: '>=6.9.0'} @@ -5689,26 +6365,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} engines: {node: '>=6.9.0'} @@ -5719,6 +6375,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.12.9: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} @@ -5728,6 +6394,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.16.12: + resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.17.8: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} @@ -5736,6 +6412,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.21.3: + resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-function-name/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==} @@ -5747,39 +6433,15 @@ packages: '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.16.12 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 - '@babel/helper-function-name': 7.19.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5790,10 +6452,22 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.12.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} @@ -5801,8 +6475,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-literals/7.16.0_@babel+core@7.12.9: @@ -5814,33 +6500,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-literals/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-literals/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-literals/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-literals/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5853,6 +6519,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} @@ -5861,6 +6537,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-member-expression-literals/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==} @@ -5871,33 +6557,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -5910,6 +6576,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} @@ -5918,6 +6594,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-modules-amd/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==} @@ -5926,54 +6612,54 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} + /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} engines: {node: '>=6.9.0'} @@ -5981,7 +6667,21 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-amd/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: @@ -5994,43 +6694,13 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-commonjs/7.17.7_@babel+core@7.12.9: - resolution: {integrity: sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-simple-access': 7.18.6 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-commonjs/7.17.7_@babel+core@7.16.12: - resolution: {integrity: sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-simple-access': 7.18.6 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/plugin-transform-modules-commonjs/7.17.7_@babel+core@7.17.8: resolution: {integrity: sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==} engines: {node: '>=6.9.0'} @@ -6038,13 +6708,28 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color + /@babel/plugin-transform-modules-commonjs/7.17.7_@babel+core@7.21.3: + resolution: {integrity: sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-simple-access': 7.18.6 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} engines: {node: '>=6.9.0'} @@ -6052,13 +6737,28 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color + /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-simple-access': 7.18.6 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} engines: {node: '>=6.9.0'} @@ -6066,7 +6766,22 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-simple-access': 7.18.6 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-simple-access': 7.18.6 babel-plugin-dynamic-import-node: 2.3.3 @@ -6081,22 +6796,38 @@ packages: dependencies: '@babel/core': 7.12.9 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-identifier': 7.19.1 babel-plugin-dynamic-import-node: 2.3.3 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.12.9: + /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.21.3: resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-identifier': 7.19.1 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.12.9: + resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-identifier': 7.19.1 babel-plugin-dynamic-import-node: 2.3.3 @@ -6104,15 +6835,15 @@ packages: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.16.12: - resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} + /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.16.12: + resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-identifier': 7.19.1 babel-plugin-dynamic-import-node: 2.3.3 @@ -6120,22 +6851,6 @@ packages: - supports-color dev: false - /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.17.8: - resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-validator-identifier': 7.19.1 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.17.8: resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} engines: {node: '>=6.9.0'} @@ -6144,7 +6859,23 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-identifier': 7.19.1 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs/7.19.0_@babel+core@7.21.3: + resolution: {integrity: sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-identifier': 7.19.1 babel-plugin-dynamic-import-node: 2.3.3 @@ -6158,50 +6889,50 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} @@ -6209,7 +6940,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-module-transforms': 7.19.0 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.19.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.19.0 transitivePeerDependencies: - supports-color @@ -6223,34 +6967,14 @@ packages: '@babel/core': 7.12.9 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 - /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.12.9: + /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.21.3: resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.16.12: - resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.16.12 - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.17.8: - resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 dev: true /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.12.9: @@ -6263,6 +6987,17 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.16.12: + resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.17.8: resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} engines: {node: '>=6.9.0'} @@ -6272,6 +7007,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.21.3: + resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-new-target/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==} @@ -6282,9 +7028,19 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -6292,8 +7048,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6302,8 +7058,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: false - /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.17.8: + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6312,13 +7068,13 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.17.8: + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-object-super/7.16.0_@babel+core@7.12.9: @@ -6333,39 +7089,13 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-replace-supers': 7.19.1 transitivePeerDependencies: @@ -6384,6 +7114,19 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} @@ -6395,6 +7138,19 @@ packages: '@babel/helper-replace-supers': 7.19.1 transitivePeerDependencies: - supports-color + dev: true + + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-replace-supers': 7.19.1 + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-parameters/7.16.3_@babel+core@7.12.9: resolution: {integrity: sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==} @@ -6405,26 +7161,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} engines: {node: '>=6.9.0'} @@ -6435,6 +7171,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.12.9: resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==} engines: {node: '>=6.9.0'} @@ -6462,6 +7208,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-parameters/7.18.8_@babel+core@7.21.3: + resolution: {integrity: sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-property-literals/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==} @@ -6472,33 +7228,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -6511,6 +7247,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} @@ -6519,14 +7265,24 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true - /@babel/plugin-transform-react-constant-elements/7.17.6_@babel+core@7.17.8: + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + + /@babel/plugin-transform-react-constant-elements/7.17.6_@babel+core@7.21.3: resolution: {integrity: sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -6547,6 +7303,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-react-display-name/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} @@ -6558,6 +7324,16 @@ packages: '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.17.8 dev: true + /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + dev: true + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} engines: {node: '>=6.9.0'} @@ -6567,13 +7343,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.17.8: + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.12.9: @@ -6585,13 +7361,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.17.8: + /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-react-jsx/7.16.0_@babel+core@7.12.9: @@ -6636,6 +7412,20 @@ packages: '@babel/types': 7.17.0 dev: true + /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.21.3: + resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 + '@babel/types': 7.21.3 + dev: true + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.12.9: resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} engines: {node: '>=6.9.0'} @@ -6647,7 +7437,7 @@ packages: '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.12.9 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.17.8: resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} @@ -6660,7 +7450,21 @@ packages: '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.17.8 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 + dev: true + + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.21.3: + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 + '@babel/types': 7.21.3 /@babel/plugin-transform-react-pure-annotations/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==} @@ -6673,6 +7477,17 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-react-pure-annotations/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-regenerator/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==} engines: {node: '>=6.9.0'} @@ -6682,36 +7497,38 @@ packages: '@babel/core': 7.12.9 regenerator-transform: 0.14.5 - /@babel/plugin-transform-regenerator/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-regenerator/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + regenerator-transform: 0.14.5 + dev: true + + /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - regenerator-transform: 0.14.5 + '@babel/helper-plugin-utils': 7.19.0 + regenerator-transform: 0.15.0 dev: true - /@babel/plugin-transform-regenerator/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==} + /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.16.12 - regenerator-transform: 0.14.5 + '@babel/helper-plugin-utils': 7.19.0 + regenerator-transform: 0.15.0 dev: false - /@babel/plugin-transform-regenerator/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - regenerator-transform: 0.14.5 - dev: true - /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} engines: {node: '>=6.9.0'} @@ -6721,6 +7538,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 regenerator-transform: 0.15.0 + dev: true + + /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + regenerator-transform: 0.15.0 /@babel/plugin-transform-reserved-words/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==} @@ -6731,9 +7559,19 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.12.9: + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -6741,8 +7579,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6751,8 +7589,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: false - /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.17.8: + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -6761,13 +7599,13 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.17.8: + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-runtime/7.16.4_@babel+core@7.12.9: @@ -6804,18 +7642,18 @@ packages: - supports-color dev: false - /@babel/plugin-transform-runtime/7.16.4_@babel+core@7.17.8: + /@babel/plugin-transform-runtime/7.16.4_@babel+core@7.21.3: resolution: {integrity: sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.16.0 '@babel/helper-plugin-utils': 7.14.5 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.17.8 - babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.17.8 - babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.17.8 + babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.21.3 + babel-plugin-polyfill-corejs3: 0.4.0_@babel+core@7.21.3 + babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.21.3 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6837,18 +7675,18 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-runtime/7.19.1_@babel+core@7.17.8: + /@babel/plugin-transform-runtime/7.19.1_@babel+core@7.21.3: resolution: {integrity: sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.19.0 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.17.8 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.17.8 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.17.8 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -6862,26 +7700,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} engines: {node: '>=6.9.0'} @@ -6892,6 +7710,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.12.9: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} @@ -6901,6 +7729,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} @@ -6909,6 +7747,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-spread/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==} @@ -6920,28 +7768,6 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - /@babel/plugin-transform-spread/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - dev: true - - /@babel/plugin-transform-spread/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 - dev: false - /@babel/plugin-transform-spread/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} engines: {node: '>=6.9.0'} @@ -6953,6 +7779,17 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 dev: true + /@babel/plugin-transform-spread/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + dev: true + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.12.9: resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} engines: {node: '>=6.9.0'} @@ -6963,6 +7800,17 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.16.12: + resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + dev: false + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.17.8: resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} engines: {node: '>=6.9.0'} @@ -6972,6 +7820,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 + dev: true + + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.21.3: + resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.18.9 /@babel/plugin-transform-sticky-regex/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==} @@ -6982,33 +7841,13 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -7021,6 +7860,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} @@ -7029,6 +7878,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-template-literals/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==} @@ -7039,26 +7898,6 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.8: resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} engines: {node: '>=6.9.0'} @@ -7069,6 +7908,16 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true + /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.12.9: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -7078,6 +7927,16 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.17.8: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -7086,6 +7945,16 @@ packages: dependencies: '@babel/core': 7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-typeof-symbol/7.16.0_@babel+core@7.12.9: resolution: {integrity: sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==} @@ -7096,9 +7965,19 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.12.9: + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -7106,8 +7985,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.16.12: + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -7116,8 +7995,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: false - /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.17.8: + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -7126,13 +8005,13 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.17.8: + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.3: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.16.12: @@ -7162,6 +8041,19 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.21.3: + resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color + /@babel/plugin-transform-typescript/7.19.3_@babel+core@7.12.9: resolution: {integrity: sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==} engines: {node: '>=6.9.0'} @@ -7175,16 +8067,16 @@ packages: transitivePeerDependencies: - supports-color - /@babel/plugin-transform-typescript/7.19.3_@babel+core@7.17.8: + /@babel/plugin-transform-typescript/7.19.3_@babel+core@7.21.3: resolution: {integrity: sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.21.3 transitivePeerDependencies: - supports-color @@ -7197,9 +8089,19 @@ packages: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.12.9: + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -7207,8 +8109,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.16.12: + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -7217,8 +8119,8 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: false - /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.17.8: + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -7227,13 +8129,13 @@ packages: '@babel/helper-plugin-utils': 7.19.0 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.17.8: + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.3: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 /@babel/plugin-transform-unicode-regex/7.16.0_@babel+core@7.12.9: @@ -7246,36 +8148,14 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 - /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.12.9: + /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.21.3: resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.9 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.19.0 - dev: true - - /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.16.12: - resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.16.12 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.19.0 - dev: false - - /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.17.8: - resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.8 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 '@babel/helper-plugin-utils': 7.19.0 dev: true @@ -7289,6 +8169,17 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.12.9 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.16.12: + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.16.12 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + dev: false + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.17.8: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} @@ -7298,6 +8189,17 @@ packages: '@babel/core': 7.17.8 '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 + dev: true + + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.3: + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 /@babel/polyfill/7.12.1: resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} @@ -7388,28 +8290,28 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.17.7 + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.12.9 - '@babel/helper-plugin-utils': 7.18.9 - '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.12.9 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.12.9 - '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.12.9 - '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.12.9 - '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.12.9 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.12.9 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.12.9 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.12.9 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.9 '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.12.9 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.12.9 @@ -7424,44 +8326,44 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.9 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.12.9 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.12.9 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.12.9 - '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.12.9 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-modules-commonjs': 7.17.7_@babel+core@7.12.9 - '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.12.9 - '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.12.9 - '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-regenerator': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.12.9 - '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.12.9 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.12.9 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.12.9 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.12.9 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-modules-amd': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-modules-systemjs': 7.19.0_@babel+core@7.12.9 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.12.9 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.12.9 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.12.9 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.12.9 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.12.9 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.12.9 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.12.9 '@babel/preset-modules': 0.1.5_@babel+core@7.12.9 - '@babel/types': 7.17.0 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.12.9 + '@babel/types': 7.21.3 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.12.9 babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.12.9 babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.12.9 - core-js-compat: 3.21.1 + core-js-compat: 3.25.5 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -7473,28 +8375,28 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.17.7 + '@babel/compat-data': 7.21.0 '@babel/core': 7.16.12 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.16.12 - '@babel/helper-plugin-utils': 7.18.9 - '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.16.12 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.16.12 - '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.16.12 - '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.16.12 - '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.16.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.16.12 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.16.12 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.16.12 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.16.12 '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.16.12 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.16.12 @@ -7509,44 +8411,44 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.16.12 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.16.12 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.16.12 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.16.12 - '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.16.12 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-modules-commonjs': 7.17.7_@babel+core@7.16.12 - '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.16.12 - '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.16.12 - '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-regenerator': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.16.12 - '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.16.12 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.16.12 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.16.12 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.16.12 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-modules-amd': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-modules-systemjs': 7.19.0_@babel+core@7.16.12 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.16.12 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.16.12 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.16.12 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.16.12 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.16.12 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.16.12 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.16.12 '@babel/preset-modules': 0.1.5_@babel+core@7.16.12 - '@babel/types': 7.17.0 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.16.12 + '@babel/types': 7.21.3 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.16.12 babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.16.12 babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.16.12 - core-js-compat: 3.21.1 + core-js-compat: 3.25.5 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -7558,94 +8460,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.17.7 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.8 - '@babel/helper-plugin-utils': 7.18.9 - '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.17.8 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.17.8 - '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.8 - '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.8 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.8 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.8 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.8 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-modules-commonjs': 7.17.7_@babel+core@7.17.8 - '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.17.8 - '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.17.8 - '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-regenerator': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.17.8 - '@babel/preset-modules': 0.1.5_@babel+core@7.17.8 - '@babel/types': 7.17.0 - babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.17.8 - babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.17.8 - babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.17.8 - core-js-compat: 3.21.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-env/7.19.3_@babel+core@7.17.8: - resolution: {integrity: sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.17.8 - '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.17.8 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.17.8 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-option': 7.18.6 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.17.8 @@ -7670,7 +8487,6 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.8 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-import-assertions': 7.18.6_@babel+core@7.17.8 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.8 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.8 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 @@ -7713,10 +8529,181 @@ packages: '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.17.8 '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.17.8 '@babel/preset-modules': 0.1.5_@babel+core@7.17.8 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.17.8 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.17.8 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.17.8 + babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.17.8 + core-js-compat: 3.25.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env/7.16.11_@babel+core@7.21.3: + resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.7 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.21.3 + '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.21.3 + '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.21.3 + '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.21.3 + '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-modules-commonjs': 7.17.7_@babel+core@7.21.3 + '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.21.3 + '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.21.3 + '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-regenerator': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.21.3 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.3 + '@babel/types': 7.17.0 + babel-plugin-polyfill-corejs2: 0.3.0_@babel+core@7.21.3 + babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.21.3 + babel-plugin-polyfill-regenerator: 0.3.0_@babel+core@7.21.3 + core-js-compat: 3.21.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-env/7.19.3_@babel+core@7.21.3: + resolution: {integrity: sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-import-assertions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-modules-amd': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-modules-systemjs': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.21.3 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.3 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.3 + '@babel/types': 7.21.3 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.3 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.3 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.3 core-js-compat: 3.25.5 semver: 6.3.0 transitivePeerDependencies: @@ -7733,6 +8720,18 @@ packages: '@babel/helper-validator-option': 7.18.6 '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.17.8 + /@babel/preset-flow/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.21.3 + dev: true + /@babel/preset-modules/0.1.5_@babel+core@7.12.9: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: @@ -7742,7 +8741,7 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.12.9 '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.12.9 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 esutils: 2.0.3 /@babel/preset-modules/0.1.5_@babel+core@7.16.12: @@ -7754,7 +8753,7 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.16.12 '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.16.12 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 esutils: 2.0.3 dev: false @@ -7767,7 +8766,20 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.17.8 '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.17.8 - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 + esutils: 2.0.3 + dev: true + + /@babel/preset-modules/0.1.5_@babel+core@7.21.3: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.3 + '@babel/types': 7.21.3 esutils: 2.0.3 /@babel/preset-react/7.16.7_@babel+core@7.17.8: @@ -7785,6 +8797,21 @@ packages: '@babel/plugin-transform-react-pure-annotations': 7.16.7_@babel+core@7.17.8 dev: true + /@babel/preset-react/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx-development': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-react-pure-annotations': 7.16.7_@babel+core@7.21.3 + dev: true + /@babel/preset-typescript/7.16.7_@babel+core@7.16.12: resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} engines: {node: '>=6.9.0'} @@ -7806,22 +8833,35 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.8 - '@babel/helper-plugin-utils': 7.18.9 - '@babel/helper-validator-option': 7.16.7 + '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-validator-option': 7.18.6 '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.8 transitivePeerDependencies: - supports-color - /@babel/preset-typescript/7.18.6_@babel+core@7.17.8: + /@babel/preset-typescript/7.16.7_@babel+core@7.21.3: + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color + + /@babel/preset-typescript/7.18.6_@babel+core@7.21.3: resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@babel/helper-plugin-utils': 7.19.0 '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.19.3_@babel+core@7.17.8 + '@babel/plugin-transform-typescript': 7.19.3_@babel+core@7.21.3 transitivePeerDependencies: - supports-color @@ -7851,11 +8891,32 @@ packages: pirates: 4.0.5 source-map-support: 0.5.20 + /@babel/register/7.18.9_@babel+core@7.21.3: + resolution: {integrity: sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.5 + source-map-support: 0.5.20 + dev: true + + /@babel/runtime-corejs2/7.5.5: + resolution: {integrity: sha512-FYATQVR00NSNi7mUfpPDp7E8RYMXDuO8gaix7u/w3GekfUinKgX1AcTxs7SoiEmoEW9mbpjrwqWSW6zCmw5h8A==} + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.13.9 + dev: false + /@babel/runtime-corejs3/7.16.3: resolution: {integrity: sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==} engines: {node: '>=6.9.0'} dependencies: - core-js-pure: 3.19.1 + core-js-pure: 3.29.1 regenerator-runtime: 0.13.9 /@babel/runtime/7.17.7: @@ -7875,29 +8936,37 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 /@babel/template/7.18.10: resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 + + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 /@babel/traverse/7.17.3: resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.3 + '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -7908,13 +8977,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.3 + '@babel/generator': 7.21.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/traverse/7.21.3: + resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.21.3 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -7942,6 +9028,14 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types/7.21.3: + resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + /@base2/pretty-print-object/1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -8002,6 +9096,26 @@ packages: source-map: 0.5.7 stylis: 4.1.3 + /@emotion/babel-plugin/11.10.5_@babel+core@7.21.3: + resolution: {integrity: sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 + '@babel/runtime': 7.19.0 + '@emotion/hash': 0.9.0 + '@emotion/memoize': 0.8.0 + '@emotion/serialize': 1.1.1 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.8.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.1.3 + dev: false + /@emotion/cache/10.0.29: resolution: {integrity: sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==} dependencies: @@ -8067,6 +9181,22 @@ packages: '@emotion/sheet': 1.2.1 '@emotion/utils': 1.2.0 + /@emotion/css/11.7.1_@babel+core@7.21.3: + resolution: {integrity: sha512-RUUgPlMZunlc7SE5A6Hg+VWRzb2cU6O9xlV78KCFgcnl25s7Qz/20oQg71iKudpLqk7xj0vhbJlwcJJMT0BOZg==} + peerDependencies: + '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/core': 7.21.3 + '@emotion/babel-plugin': 11.10.5_@babel+core@7.21.3 + '@emotion/cache': 11.10.5 + '@emotion/serialize': 1.1.1 + '@emotion/sheet': 1.2.1 + '@emotion/utils': 1.2.0 + dev: false + /@emotion/hash/0.8.0: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} @@ -8141,6 +9271,31 @@ packages: react: 17.0.2 dev: false + /@emotion/react/11.10.5_zg7wlf5auq2m3ro2gp4uufjvme: + resolution: {integrity: sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/core': 7.21.3 + '@babel/runtime': 7.19.0 + '@emotion/babel-plugin': 11.10.5_@babel+core@7.21.3 + '@emotion/cache': 11.10.5 + '@emotion/serialize': 1.1.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@17.0.2 + '@emotion/utils': 1.2.0 + '@emotion/weak-memoize': 0.3.0 + '@types/react': 17.0.50 + hoist-non-react-statics: 3.3.2 + react: 17.0.2 + dev: false + /@emotion/serialize/0.11.16: resolution: {integrity: sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==} dependencies: @@ -8203,6 +9358,30 @@ packages: react: 17.0.2 dev: true + /@emotion/styled/11.8.1_6t3indjc5ssefvr44gr3wo2uqu: + resolution: {integrity: sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ==} + peerDependencies: + '@babel/core': ^7.0.0 + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/core': 7.21.3 + '@babel/runtime': 7.19.0 + '@emotion/babel-plugin': 11.10.5_@babel+core@7.21.3 + '@emotion/is-prop-valid': 1.1.2 + '@emotion/react': 11.10.5_zg7wlf5auq2m3ro2gp4uufjvme + '@emotion/serialize': 1.1.1 + '@emotion/utils': 1.2.0 + '@types/react': 17.0.50 + react: 17.0.2 + dev: false + /@emotion/styled/11.8.1_c2qm47vaialpqni522adyu6za4: resolution: {integrity: sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ==} peerDependencies: @@ -9120,7 +10299,7 @@ packages: resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==} engines: {node: '>= 6'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/types': 24.9.0 babel-plugin-istanbul: 5.2.0 chalk: 2.4.2 @@ -9144,7 +10323,7 @@ packages: resolution: {integrity: sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==} engines: {node: '>= 8.3'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/types': 25.5.0 babel-plugin-istanbul: 6.1.1 chalk: 3.0.0 @@ -9168,7 +10347,7 @@ packages: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -9190,7 +10369,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -9247,13 +10426,20 @@ packages: '@types/yargs': 16.0.4 chalk: 4.1.2 + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/gen-mapping/0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.16 + '@jridgewell/trace-mapping': 0.3.17 /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -9272,6 +10458,12 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -9288,6 +10480,10 @@ packages: /@kwsites/promise-deferred/1.1.1: resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + /@leichtgewicht/ip-codec/2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: true + /@mdx-js/loader/1.6.22_react@17.0.2: resolution: {integrity: sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==} dependencies: @@ -9917,6 +11113,46 @@ packages: playwright-core: 1.30.0 dev: true + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_kgzwhhiezcyg2m3alqq7chac3a: + resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.29.1 + error-stack-parser: 2.0.6 + find-up: 5.0.0 + html-entities: 2.3.2 + loader-utils: 2.0.4 + react-refresh: 0.14.0 + schema-utils: 3.1.1 + source-map: 0.7.3 + webpack: 5.70.0_webpack-cli@4.9.2 + webpack-dev-server: 4.12.0_jaxrlecucqtr54lmhmx67obzmy + dev: true + /@pmmmwh/react-refresh-webpack-plugin/0.5.1_a3gyllrqvxpec3fpybsrposvju: resolution: {integrity: sha512-ccap6o7+y5L8cnvkZ9h8UXCGyy2DqtwCD+/N3Yru6lxMvcdkPKtdx13qd7sAC9s5qZktOmWf9lfUjsGOvSdYhg==} engines: {node: '>= 10.13'} @@ -9945,11 +11181,11 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.19.1 + core-js-pure: 3.29.1 error-stack-parser: 2.0.6 find-up: 5.0.0 html-entities: 2.3.2 - loader-utils: 2.0.2 + loader-utils: 2.0.4 react-refresh: 0.11.0 schema-utils: 3.1.1 source-map: 0.7.3 @@ -10600,7 +11836,7 @@ packages: '@storybook/node-logger': 6.4.19 '@storybook/postinstall': 6.4.19 '@storybook/preview-web': 6.4.19_sfoxds7t5ydpegc3knd667wn6m - '@storybook/react': 6.4.19_a55upwwpdj22rf6pemjk4qxjbi + '@storybook/react': 6.4.19_eyy24cwvfyikqccjc6kc5n6u7q '@storybook/source-loader': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/store': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/theming': 6.4.19_sfoxds7t5ydpegc3knd667wn6m @@ -10939,27 +12175,27 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/api': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/channel-postmessage': 6.4.19 @@ -10979,9 +12215,9 @@ packages: '@types/node': 14.14.33 '@types/webpack': 4.41.32 autoprefixer: 9.8.6 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.25.5 css-loader: 3.6.0_webpack@4.46.0 @@ -11032,27 +12268,27 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/api': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/channel-postmessage': 6.4.19 @@ -11072,9 +12308,9 @@ packages: '@types/node': 14.14.33 '@types/webpack': 4.41.32 autoprefixer: 9.8.6 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.25.5 css-loader: 3.6.0_webpack@4.46.0 @@ -11125,27 +12361,27 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/api': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/channel-postmessage': 6.4.19 @@ -11165,9 +12401,9 @@ packages: '@types/node': 14.14.33 '@types/webpack': 4.41.32 autoprefixer: 9.8.6 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.25.5 css-loader: 3.6.0_webpack@4.46.0 @@ -11218,27 +12454,27 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/api': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/channel-postmessage': 6.4.19 @@ -11258,9 +12494,9 @@ packages: '@types/node': 14.14.33 '@types/webpack': 4.41.32 autoprefixer: 9.8.6 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.25.5 css-loader: 3.6.0_webpack@4.46.0 @@ -11311,27 +12547,27 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/api': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/channel-postmessage': 6.4.19 @@ -11351,9 +12587,9 @@ packages: '@types/node': 14.14.33 '@types/webpack': 4.41.32 autoprefixer: 9.8.6 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.25.5 css-loader: 3.6.0_webpack@4.46.0 @@ -11639,7 +12875,7 @@ packages: '@storybook/ui': 6.4.19_hiunvzosbwliizyirxfy6hjyim airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.21.1 + core-js: 3.25.5 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 @@ -11717,7 +12953,7 @@ packages: '@storybook/ui': 6.4.19_sfoxds7t5ydpegc3knd667wn6m airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.21.1 + core-js: 3.25.5 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 @@ -11756,7 +12992,7 @@ packages: '@storybook/ui': 6.4.19_hiunvzosbwliizyirxfy6hjyim airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.21.1 + core-js: 3.25.5 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 @@ -11782,34 +13018,34 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 - '@babel/register': 7.18.9_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.16.7_@babel+core@7.21.3 + '@babel/register': 7.18.9_@babel+core@7.21.3 '@storybook/node-logger': 6.4.19 '@storybook/semver': 7.3.2 '@types/node': 14.14.33 '@types/pretty-hrtime': 1.0.1 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 chalk: 4.1.2 core-js: 3.21.1 express: 4.18.1 @@ -11820,7 +13056,7 @@ packages: glob: 7.2.0 handlebars: 4.7.7 interpret: 2.2.0 - json5: 2.2.0 + json5: 2.2.3 lazy-universal-dotenv: 3.0.1 picomatch: 2.3.0 pkg-dir: 5.0.0 @@ -11852,34 +13088,34 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 - '@babel/register': 7.18.9_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-decorators': 7.16.4_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@babel/preset-typescript': 7.16.7_@babel+core@7.21.3 + '@babel/register': 7.18.9_@babel+core@7.21.3 '@storybook/node-logger': 6.4.19 '@storybook/semver': 7.3.2 '@types/node': 14.14.33 '@types/pretty-hrtime': 1.0.1 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.8 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.21.3 chalk: 4.1.2 core-js: 3.21.1 express: 4.18.1 @@ -11890,7 +13126,7 @@ packages: glob: 7.2.0 handlebars: 4.7.7 interpret: 2.2.0 - json5: 2.2.0 + json5: 2.2.3 lazy-universal-dotenv: 3.0.1 picomatch: 2.3.0 pkg-dir: 5.0.0 @@ -11978,7 +13214,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0_webpack-cli@3.3.12 - ws: 8.12.1 + ws: 8.13.0 transitivePeerDependencies: - '@types/react' - acorn @@ -12055,7 +13291,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 - ws: 8.12.1 + ws: 8.13.0 transitivePeerDependencies: - '@types/react' - acorn @@ -12130,7 +13366,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0_webpack-cli@3.3.12 - ws: 8.12.1 + ws: 8.13.0 transitivePeerDependencies: - '@types/react' - acorn @@ -12205,7 +13441,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0_webpack-cli@3.3.12 - ws: 8.12.1 + ws: 8.13.0 transitivePeerDependencies: - '@types/react' - acorn @@ -12282,7 +13518,7 @@ packages: util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 - ws: 8.12.1 + ws: 8.13.0 transitivePeerDependencies: - '@types/react' - acorn @@ -12477,13 +13713,13 @@ packages: /@storybook/csf-tools/6.4.19: resolution: {integrity: sha512-gf/zRhGoAVsFwSyV2tc+jeJfZQkxF6QsaZgbUSe24/IUvGFCT/PS/jZq1qy7dECAwrTOfykgu8juyBtj6WhWyw==} dependencies: - '@babel/core': 7.17.8 - '@babel/generator': 7.19.3 - '@babel/parser': 7.19.3 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 '@mdx-js/mdx': 1.6.22 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.25.5 @@ -12514,9 +13750,9 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/core-client': 6.4.19_4khy3msxr4lnrhwh6cbg2lwt64 '@storybook/core-common': 6.4.19_mqzgkamhc7bbbitv65cxtf4gfa @@ -12525,7 +13761,7 @@ packages: '@storybook/ui': 6.4.19_hiunvzosbwliizyirxfy6hjyim '@types/node': 14.14.33 '@types/webpack': 4.41.32 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.25.5 @@ -12575,9 +13811,9 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/core-client': 6.4.19_lb6j7tllhltqtas2n635xqdotu '@storybook/core-common': 6.4.19_56jbash75ng5psbctf36wqywr4 @@ -12586,7 +13822,7 @@ packages: '@storybook/ui': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@types/node': 14.14.33 '@types/webpack': 4.41.32 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.25.5 @@ -12636,9 +13872,9 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/core-client': 6.4.19_lb6j7tllhltqtas2n635xqdotu '@storybook/core-common': 6.4.19_56jbash75ng5psbctf36wqywr4 @@ -12647,7 +13883,7 @@ packages: '@storybook/ui': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@types/node': 14.14.33 '@types/webpack': 4.41.32 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.25.5 @@ -12697,9 +13933,9 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/core-client': 6.4.19_lb6j7tllhltqtas2n635xqdotu '@storybook/core-common': 6.4.19_mqzgkamhc7bbbitv65cxtf4gfa @@ -12708,7 +13944,7 @@ packages: '@storybook/ui': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@types/node': 14.14.33 '@types/webpack': 4.41.32 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.25.5 @@ -12758,9 +13994,9 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m '@storybook/core-client': 6.4.19_4khy3msxr4lnrhwh6cbg2lwt64 '@storybook/core-common': 6.4.19_mqzgkamhc7bbbitv65cxtf4gfa @@ -12769,7 +14005,7 @@ packages: '@storybook/ui': 6.4.19_hiunvzosbwliizyirxfy6hjyim '@types/node': 14.14.33 '@types/webpack': 4.41.32 - babel-loader: 8.2.3_w4x3pzrj2omidyjy5w3nzug7xy + babel-loader: 8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.25.5 @@ -12930,71 +14166,6 @@ packages: - supports-color dev: true - /@storybook/react/6.4.19_a55upwwpdj22rf6pemjk4qxjbi: - resolution: {integrity: sha512-5b3i8jkVrjQGmcxxxXwCduHPIh+cluWkfeweKeQOe+lW4BR8fuUICo3AMLrYPAtB/UcaJyYkIYmTvF2mkfepFA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - '@babel/core': ^7.11.5 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - typescript: '*' - peerDependenciesMeta: - '@babel/core': - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.17.8 - '@babel/preset-flow': 7.16.7_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.1_a3gyllrqvxpec3fpybsrposvju - '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m - '@storybook/core': 6.4.19_4cb7vxhorbasgfyagprjvpaxzu - '@storybook/core-common': 6.4.19_56jbash75ng5psbctf36wqywr4 - '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/node-logger': 6.4.19 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0_lasgyenclx45ngbljrbo537mpe - '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.19_sfoxds7t5ydpegc3knd667wn6m - '@types/webpack-env': 1.16.3 - babel-plugin-add-react-displayname: 0.0.5 - babel-plugin-named-asset-import: 0.3.8_@babel+core@7.17.8 - babel-plugin-react-docgen: 4.2.1 - core-js: 3.21.1 - global: 4.4.0 - lodash: 4.17.21 - prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-refresh: 0.11.0 - read-pkg-up: 7.0.1 - regenerator-runtime: 0.13.9 - ts-dedent: 2.2.0 - typescript: 4.8.4 - webpack: 4.46.0 - transitivePeerDependencies: - - '@storybook/builder-webpack5' - - '@storybook/manager-webpack5' - - '@types/react' - - '@types/webpack' - - acorn - - bluebird - - bufferutil - - encoding - - eslint - - sockjs-client - - supports-color - - type-fest - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-command - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - /@storybook/react/6.4.19_cqdgeqmmrux6joug3kc73q4l6m: resolution: {integrity: sha512-5b3i8jkVrjQGmcxxxXwCduHPIh+cluWkfeweKeQOe+lW4BR8fuUICo3AMLrYPAtB/UcaJyYkIYmTvF2mkfepFA==} engines: {node: '>=10.13.0'} @@ -13060,6 +14231,71 @@ packages: - webpack-plugin-serve dev: true + /@storybook/react/6.4.19_eyy24cwvfyikqccjc6kc5n6u7q: + resolution: {integrity: sha512-5b3i8jkVrjQGmcxxxXwCduHPIh+cluWkfeweKeQOe+lW4BR8fuUICo3AMLrYPAtB/UcaJyYkIYmTvF2mkfepFA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.11.5 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + '@babel/core': + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.21.3 + '@babel/preset-flow': 7.16.7_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.1_a3gyllrqvxpec3fpybsrposvju + '@storybook/addons': 6.4.19_sfoxds7t5ydpegc3knd667wn6m + '@storybook/core': 6.4.19_4cb7vxhorbasgfyagprjvpaxzu + '@storybook/core-common': 6.4.19_56jbash75ng5psbctf36wqywr4 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/node-logger': 6.4.19 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0_lasgyenclx45ngbljrbo537mpe + '@storybook/semver': 7.3.2 + '@storybook/store': 6.4.19_sfoxds7t5ydpegc3knd667wn6m + '@types/webpack-env': 1.16.3 + babel-plugin-add-react-displayname: 0.0.5 + babel-plugin-named-asset-import: 0.3.8_@babel+core@7.21.3 + babel-plugin-react-docgen: 4.2.1 + core-js: 3.21.1 + global: 4.4.0 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2_react@17.0.2 + react-refresh: 0.11.0 + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + typescript: 4.8.4 + webpack: 4.46.0 + transitivePeerDependencies: + - '@storybook/builder-webpack5' + - '@storybook/manager-webpack5' + - '@types/react' + - '@types/webpack' + - acorn + - bluebird + - bufferutil + - encoding + - eslint + - sockjs-client + - supports-color + - type-fest + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-command + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + /@storybook/react/6.4.19_pjugpuchrb7ea5kuxwnxihy6zq: resolution: {integrity: sha512-5b3i8jkVrjQGmcxxxXwCduHPIh+cluWkfeweKeQOe+lW4BR8fuUICo3AMLrYPAtB/UcaJyYkIYmTvF2mkfepFA==} engines: {node: '>=10.13.0'} @@ -13167,7 +14403,7 @@ packages: core-js: 3.21.1 estraverse: 5.3.0 global: 4.4.0 - loader-utils: 2.0.2 + loader-utils: 2.0.4 lodash: 4.17.21 prettier: 2.3.0 react: 17.0.2 @@ -13240,7 +14476,7 @@ packages: '@storybook/theming': 6.4.19_sfoxds7t5ydpegc3knd667wn6m copy-to-clipboard: 3.3.1 core-js: 3.25.5 - core-js-pure: 3.19.1 + core-js-pure: 3.29.1 downshift: 6.1.12_react@17.0.2 emotion-theming: 10.3.0_gfrer23gq2rp2t523t6qbxrx6m fuse.js: 3.6.1 @@ -13280,7 +14516,7 @@ packages: '@storybook/theming': 6.4.19_sfoxds7t5ydpegc3knd667wn6m copy-to-clipboard: 3.3.1 core-js: 3.25.5 - core-js-pure: 3.19.1 + core-js-pure: 3.29.1 downshift: 6.1.12_react@17.0.2 emotion-theming: 10.3.0_gfrer23gq2rp2t523t6qbxrx6m fuse.js: 3.6.1 @@ -13308,7 +14544,7 @@ packages: postcss: '>=7.0.0' postcss-syntax: '>=0.36.2' dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 postcss: 7.0.39 postcss-syntax: 0.36.2_postcss@7.0.39 transitivePeerDependencies: @@ -13399,14 +14635,14 @@ packages: resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 dev: true /@svgr/plugin-jsx/5.5.0: resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@svgr/babel-preset': 5.5.0 '@svgr/hast-util-to-babel-ast': 5.5.0 svg-parser: 2.0.4 @@ -13427,14 +14663,14 @@ packages: resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-react-constant-elements': 7.17.6_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-react': 7.16.7_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-constant-elements': 7.17.6_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-react': 7.16.7_@babel+core@7.21.3 '@svgr/core': 5.5.0 '@svgr/plugin-jsx': 5.5.0 '@svgr/plugin-svgo': 5.5.0 - loader-utils: 2.0.2 + loader-utils: 2.0.4 transitivePeerDependencies: - supports-color dev: true @@ -13537,34 +14773,6 @@ packages: react-error-boundary: 3.1.4_react@17.0.2 dev: true - /@testing-library/react/12.1.4_6l5554ty5ajsajah6yazvrjhoe: - resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} - engines: {node: '>=12'} - peerDependencies: - react: '*' - react-dom: '*' - dependencies: - '@babel/runtime': 7.19.0 - '@testing-library/dom': 8.11.3 - '@types/react-dom': 17.0.17 - react: 17.0.2 - react-dom: 18.2.0_react@17.0.2 - dev: false - - /@testing-library/react/12.1.4_prpqlkd37azqwypxturxi7uyci: - resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} - engines: {node: '>=12'} - peerDependencies: - react: '*' - react-dom: '*' - dependencies: - '@babel/runtime': 7.19.0 - '@testing-library/dom': 8.11.3 - '@types/react-dom': 17.0.17 - react: 17.0.2 - react-dom: 16.14.0_react@17.0.2 - dev: true - /@testing-library/react/12.1.4_sfoxds7t5ydpegc3knd667wn6m: resolution: {integrity: sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA==} engines: {node: '>=12'} @@ -13577,7 +14785,6 @@ packages: '@types/react-dom': 17.0.17 react: 17.0.2 react-dom: 17.0.2_react@17.0.2 - dev: true /@testing-library/user-event/13.5.0_gzufz4q333be4gqfrvipwvqt6a: resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} @@ -13625,8 +14832,8 @@ packages: /@types/babel__core/7.1.16: resolution: {integrity: sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==} dependencies: - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 '@types/babel__generator': 7.6.3 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.14.2 @@ -13634,18 +14841,18 @@ packages: /@types/babel__generator/7.6.3: resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 /@types/babel__traverse/7.14.2: resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} @@ -13654,6 +14861,12 @@ packages: '@types/node': 18.11.18 dev: true + /@types/bonjour/3.5.10: + resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + dependencies: + '@types/node': 18.11.18 + dev: true + /@types/cacheable-request/6.0.2: resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==} dependencies: @@ -13687,6 +14900,13 @@ packages: resolution: {integrity: sha512-HjXUmIld0gwvyG8MU/17QtLzOyuMX4jbGuijmS9sWsob5xxgZ/hY9cbRCaHIHqTQ3HMLhwS3F8uXq3Bt9zgzHA==} dev: true + /@types/connect-history-api-fallback/1.3.5: + resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} + dependencies: + '@types/express-serve-static-core': 4.17.31 + '@types/node': 18.11.18 + dev: true + /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: @@ -13799,6 +15019,12 @@ packages: /@types/http-cache-semantics/4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} + /@types/http-proxy/1.17.10: + resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} + dependencies: + '@types/node': 18.11.18 + dev: true + /@types/is-function/1.0.1: resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==} dev: true @@ -14069,7 +15295,6 @@ packages: /@types/retry/0.12.1: resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} - dev: false /@types/scheduler/0.16.2: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} @@ -14077,6 +15302,12 @@ packages: /@types/semver/7.3.12: resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} + /@types/serve-index/1.9.1: + resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + dependencies: + '@types/express': 4.17.14 + dev: true + /@types/serve-static/1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: @@ -14088,6 +15319,12 @@ packages: resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} dev: true + /@types/sockjs/0.3.33: + resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} + dependencies: + '@types/node': 18.11.18 + dev: true + /@types/source-list-map/0.1.2: resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} dev: true @@ -14179,7 +15416,7 @@ packages: '@types/wordpress__components': 19.10.5_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__data': 6.0.2 '@types/wordpress__keycodes': 2.3.1 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 react-autosize-textarea: 7.1.0_sfoxds7t5ydpegc3knd667wn6m transitivePeerDependencies: - react @@ -14193,7 +15430,7 @@ packages: dependencies: '@types/react': 17.0.50 '@types/wordpress__components': 19.10.5_sfoxds7t5ydpegc3knd667wn6m - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 transitivePeerDependencies: - react - react-dom @@ -14220,7 +15457,7 @@ packages: '@types/tinycolor2': 1.4.3 '@types/wordpress__notices': 3.5.0 '@types/wordpress__rich-text': 3.4.6 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 downshift: 6.1.12_react@17.0.2 re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m transitivePeerDependencies: @@ -14283,7 +15520,7 @@ packages: dependencies: '@types/wordpress__block-editor': 7.0.0_sfoxds7t5ydpegc3knd667wn6m '@types/wordpress__core-data': 2.4.5 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 transitivePeerDependencies: - react - react-dom @@ -14324,6 +15561,12 @@ packages: '@types/wordpress__data': 6.0.2 dev: true + /@types/ws/8.5.4: + resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + dependencies: + '@types/node': 18.11.18 + dev: true + /@types/yargs-parser/20.2.1: resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} @@ -14942,7 +16185,7 @@ packages: webpack-cli: 4.x.x dependencies: webpack: 5.70.0_webpack-cli@4.9.2 - webpack-cli: 4.9.2_wbg6qaiqcwsayvtung7xs6mhka + webpack-cli: 4.9.2_ciq5cijsysjq5sik752b4nyq2m dev: true /@webpack-cli/info/1.4.1_webpack-cli@4.9.2: @@ -14951,7 +16194,20 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.9.2_wbg6qaiqcwsayvtung7xs6mhka + webpack-cli: 4.9.2_ciq5cijsysjq5sik752b4nyq2m + dev: true + + /@webpack-cli/serve/1.6.1_ht4xi23ezbiqlmpjtiwigrodwi: + resolution: {integrity: sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack-cli: 4.9.2_ciq5cijsysjq5sik752b4nyq2m + webpack-dev-server: 4.12.0_jaxrlecucqtr54lmhmx67obzmy dev: true /@webpack-cli/serve/1.6.1_webpack-cli@4.9.2: @@ -14963,7 +16219,7 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.9.2_wbg6qaiqcwsayvtung7xs6mhka + webpack-cli: 4.9.2_webpack@5.70.0 dev: true /@wojtekmaj/enzyme-adapter-react-17/0.6.6_7ltvq4e2railvf5uya4ffxpe2a: @@ -15012,6 +16268,12 @@ packages: - react-native dev: false + /@woocommerce/settings/1.0.0: + resolution: {integrity: sha512-BjrT56Cz8XTRHw2JNPmANRkYh2rzdF33wOa56lah1qb/MjHUKuVJ0PTSZ19S5Trb92IkxfcIVB26CSdxXnf5Og==} + dependencies: + '@babel/runtime-corejs2': 7.5.5 + dev: false + /@woocommerce/woocommerce-rest-api/1.0.1: resolution: {integrity: sha512-YBk3EEYE0zax/egx6Rhpbu6hcCFyZpYQrjH9JO4NUGU3n3T0W9Edn7oAUbjL/c7Oezcg+UaQluCaKjY/B3zwxg==} engines: {node: '>=8.0.0'} @@ -15037,8 +16299,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/dom-ready': 3.28.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/dom-ready': 3.6.1 + '@wordpress/i18n': 4.6.1 dev: false /@wordpress/api-fetch/3.23.1_react-native@0.70.0: @@ -15066,8 +16328,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/i18n': 4.6.1 + '@wordpress/url': 3.7.1 dev: true /@wordpress/api-fetch/6.25.0: @@ -15083,8 +16345,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/i18n': 4.6.1 + '@wordpress/url': 3.7.1 dev: false /@wordpress/autop/3.19.0: @@ -15109,13 +16371,13 @@ packages: '@babel/runtime': 7.17.7 dev: true - /@wordpress/babel-plugin-import-jsx-pragma/2.7.0_@babel+core@7.17.8: + /@wordpress/babel-plugin-import-jsx-pragma/2.7.0_@babel+core@7.21.3: resolution: {integrity: sha512-yR+rSyfHKfevW84vKBOERpjEslD/o00CaYMftywVYOjsOQ8GLS6xv/VgDcpQ8JomJ9eRRInLRpeGKTM3lOa4xQ==} engines: {node: '>=8'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 dev: true /@wordpress/babel-plugin-import-jsx-pragma/3.1.0_@babel+core@7.12.9: @@ -15136,31 +16398,31 @@ packages: '@babel/core': 7.16.12 dev: false - /@wordpress/babel-plugin-import-jsx-pragma/3.1.2_@babel+core@7.17.8: + /@wordpress/babel-plugin-import-jsx-pragma/3.1.2_@babel+core@7.21.3: resolution: {integrity: sha512-oMJnM3cJlu1hQMO4XmTFDhNPclj0cLRIeV5Y6uIF/9oNhhSfaMFu+ty0B4zBYodqwes/vbndwRg4j2q2bhG/Dg==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.12.9 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 dev: true - /@wordpress/babel-plugin-import-jsx-pragma/3.2.0_@babel+core@7.17.8: + /@wordpress/babel-plugin-import-jsx-pragma/3.2.0_@babel+core@7.21.3: resolution: {integrity: sha512-XK3Sdpi9MWoy5qPHnRroY/ypX0VtT5yI5809u5As1P/3k4vlXNw8USH4lJ+rkurAOVqqN5mFlf2XAL9AkpfXyg==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.12.9 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 dev: true - /@wordpress/babel-plugin-import-jsx-pragma/4.11.0_@babel+core@7.17.8: + /@wordpress/babel-plugin-import-jsx-pragma/4.11.0_@babel+core@7.21.3: resolution: {integrity: sha512-yOK+vnuL9vm5GFwKyQ4SnMfcNBPHN21HeSPEFA7bB+pLT4xwgvdN7CVEYfvoRZbtZna/fMJgBqhhdEKXjlxViw==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.12.9 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 dev: false /@wordpress/babel-preset-default/3.0.2_@babel+core@7.12.9: @@ -15186,12 +16448,12 @@ packages: resolution: {integrity: sha512-VKPoC5We2GNxon5umOeZ7NIP4CfP7X5gqslSnNrLW4kD1XgmbVaCs2ISFF8+mObVVb6KAzbaUjI6OWljcUb5UA==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.8 - '@babel/plugin-transform-runtime': 7.16.4_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.21.3 + '@babel/plugin-transform-runtime': 7.16.4_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 '@babel/runtime': 7.19.0 - '@wordpress/babel-plugin-import-jsx-pragma': 2.7.0_@babel+core@7.17.8 + '@wordpress/babel-plugin-import-jsx-pragma': 2.7.0_@babel+core@7.21.3 '@wordpress/browserslist-config': 2.7.0 '@wordpress/element': 2.20.3 '@wordpress/warning': 1.4.2 @@ -15204,13 +16466,13 @@ packages: resolution: {integrity: sha512-mBB1KHWT2vN+maKIPYLQSxhhAzW6CNwYiJNRSNaNBALie9TULe7etrnwoZ1eqPVsuYvBlXB4XKcPaSm3/FW+qQ==} engines: {node: '>=12'} dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-runtime': 7.19.1_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-runtime': 7.19.1_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@babel/runtime': 7.19.0 - '@wordpress/babel-plugin-import-jsx-pragma': 3.2.0_@babel+core@7.17.8 + '@wordpress/babel-plugin-import-jsx-pragma': 3.2.0_@babel+core@7.21.3 '@wordpress/browserslist-config': 4.1.3 '@wordpress/element': 4.20.0 '@wordpress/warning': 2.28.0 @@ -15244,16 +16506,16 @@ packages: resolution: {integrity: sha512-eqw6u6ndjbseWOQju9TpnXho6eimtGMlfRwPv1kO3yHV7EXDRw0p5MRMmoN29+lSG1b3MtSj6k9XwYNW0YF/qw==} engines: {node: '>=12'} dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.8 - '@babel/plugin-transform-runtime': 7.16.4_@babel+core@7.17.8 - '@babel/preset-env': 7.16.11_@babel+core@7.17.8 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 - '@babel/runtime': 7.17.7 - '@wordpress/babel-plugin-import-jsx-pragma': 3.1.2_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.21.3 + '@babel/plugin-transform-runtime': 7.16.4_@babel+core@7.21.3 + '@babel/preset-env': 7.16.11_@babel+core@7.21.3 + '@babel/preset-typescript': 7.16.7_@babel+core@7.21.3 + '@babel/runtime': 7.19.0 + '@wordpress/babel-plugin-import-jsx-pragma': 3.1.2_@babel+core@7.21.3 '@wordpress/browserslist-config': 4.1.3 - '@wordpress/element': 4.20.0 - '@wordpress/warning': 2.28.0 + '@wordpress/element': 4.4.1 + '@wordpress/warning': 2.6.1 browserslist: 4.20.2 core-js: 3.21.1 transitivePeerDependencies: @@ -15264,13 +16526,13 @@ packages: resolution: {integrity: sha512-nMTVxJAfNTT8fOJfmcFgM1424wyzj/B00J1ulQG3QGYCLCqmXFmfevYepoElEDQrafFNTgvWfUYZs6oTVMrAZQ==} engines: {node: '>=14'} dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-runtime': 7.19.1_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 - '@babel/preset-typescript': 7.18.6_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-runtime': 7.19.1_@babel+core@7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 + '@babel/preset-typescript': 7.18.6_@babel+core@7.21.3 '@babel/runtime': 7.19.0 - '@wordpress/babel-plugin-import-jsx-pragma': 4.11.0_@babel+core@7.17.8 + '@wordpress/babel-plugin-import-jsx-pragma': 4.11.0_@babel+core@7.21.3 '@wordpress/browserslist-config': 5.11.0 '@wordpress/element': 5.5.0 '@wordpress/warning': 2.28.0 @@ -15303,6 +16565,64 @@ packages: dependencies: '@babel/runtime': 7.19.0 + /@wordpress/block-editor/10.2.0_mtk4wljkd5jimhszw4p7nnxuzm: + resolution: {integrity: sha512-9Bxq9hY3WEqodn/K/WSE+PoIwv6jKkKBP0pxXFJTWV1yc8/Np9QHV/7wG7qjztxxgu00FrYF7u8OZyvjPrSNYw==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@react-spring/web': 9.5.5_sfoxds7t5ydpegc3knd667wn6m + '@wordpress/a11y': 3.28.0 + '@wordpress/api-fetch': 6.25.0 + '@wordpress/blob': 3.28.0 + '@wordpress/blocks': 11.18.0_react@17.0.2 + '@wordpress/components': 21.2.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/data': 7.3.0_react@17.0.2 + '@wordpress/date': 4.28.0 + '@wordpress/deprecated': 3.28.0 + '@wordpress/dom': 3.28.0 + '@wordpress/element': 4.20.0 + '@wordpress/hooks': 3.28.0 + '@wordpress/html-entities': 3.28.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/icons': 9.19.0 + '@wordpress/is-shallow-equal': 4.28.0 + '@wordpress/keyboard-shortcuts': 3.17.0_react@17.0.2 + '@wordpress/keycodes': 3.28.0 + '@wordpress/notices': 3.28.0_react@17.0.2 + '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/shortcode': 3.28.0 + '@wordpress/style-engine': 1.2.0 + '@wordpress/token-list': 2.28.0 + '@wordpress/url': 3.29.0 + '@wordpress/warning': 2.28.0 + '@wordpress/wordcount': 3.28.0 + classnames: 2.3.1 + colord: 2.9.2 + diff: 4.0.2 + dom-scroll-into-view: 1.2.1 + inherits: 2.0.4 + lodash: 4.17.21 + react: 17.0.2 + react-autosize-textarea: 7.1.0_sfoxds7t5ydpegc3knd667wn6m + react-dom: 17.0.2_react@17.0.2 + react-easy-crop: 4.5.1_sfoxds7t5ydpegc3knd667wn6m + rememo: 4.0.0 + remove-accents: 0.4.2 + traverse: 0.6.6 + transitivePeerDependencies: + - '@babel/core' + - '@babel/helper-module-imports' + - '@babel/types' + - '@types/react' + - aslemammad-vite-plugin-macro + - babel-plugin-macros + - vite + dev: false + /@wordpress/block-editor/10.2.0_vcke6catv4iqpjdw24uwvlzyyi: resolution: {integrity: sha512-9Bxq9hY3WEqodn/K/WSE+PoIwv6jKkKBP0pxXFJTWV1yc8/Np9QHV/7wG7qjztxxgu00FrYF7u8OZyvjPrSNYw==} engines: {node: '>=12'} @@ -15361,7 +16681,7 @@ packages: - vite dev: false - /@wordpress/block-editor/8.6.0_tufdcic6wklrwyy3rhbsbktylu: + /@wordpress/block-editor/8.6.0_eqi5qhcxfphl6j3pngzexvnehi: resolution: {integrity: sha512-Low88BcV7pUSULNytPbO8KWrrMnQA7FnbYW1UOj+GJt+zsYqIleYZccjI5DoFTsXAAKn8RYPytX0i6F6jDM6XQ==} engines: {node: '>=12'} peerDependencies: @@ -15374,7 +16694,7 @@ packages: '@wordpress/api-fetch': 6.25.0 '@wordpress/blob': 3.28.0 '@wordpress/blocks': 11.18.0_react@17.0.2 - '@wordpress/components': 19.12.0_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/components': 19.12.0_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/compose': 5.17.0_react@17.0.2 '@wordpress/data': 6.15.0_react@17.0.2 '@wordpress/date': 4.28.0 @@ -15414,6 +16734,60 @@ packages: - react-with-direction dev: false + /@wordpress/block-editor/9.8.0_mtk4wljkd5jimhszw4p7nnxuzm: + resolution: {integrity: sha512-zIPqEysaLFJMnVKU/yCoCEBT3Co9xsa4Ow91T/LI94ll3LeWG/pyiX4PSSQNTx74AqbcNO2p79LVON4FLdu+mQ==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@react-spring/web': 9.5.5_sfoxds7t5ydpegc3knd667wn6m + '@wordpress/a11y': 3.28.0 + '@wordpress/api-fetch': 6.25.0 + '@wordpress/blob': 3.19.0 + '@wordpress/blocks': 11.18.0_react@17.0.2 + '@wordpress/components': 20.0.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/data': 7.3.0_react@17.0.2 + '@wordpress/date': 4.28.0 + '@wordpress/deprecated': 3.28.0 + '@wordpress/dom': 3.28.0 + '@wordpress/element': 4.20.0 + '@wordpress/hooks': 3.28.0 + '@wordpress/html-entities': 3.28.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/icons': 9.19.0 + '@wordpress/is-shallow-equal': 4.19.0 + '@wordpress/keyboard-shortcuts': 3.17.0_react@17.0.2 + '@wordpress/keycodes': 3.28.0 + '@wordpress/notices': 3.28.0_react@17.0.2 + '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/shortcode': 3.19.0 + '@wordpress/style-engine': 0.15.0 + '@wordpress/token-list': 2.19.0 + '@wordpress/url': 3.29.0 + '@wordpress/warning': 2.28.0 + '@wordpress/wordcount': 3.19.0 + change-case: 4.1.2 + classnames: 2.3.1 + colord: 2.9.2 + diff: 4.0.2 + dom-scroll-into-view: 1.2.1 + inherits: 2.0.4 + lodash: 4.17.21 + react: 17.0.2 + react-autosize-textarea: 7.1.0_sfoxds7t5ydpegc3knd667wn6m + react-dom: 17.0.2_react@17.0.2 + react-easy-crop: 3.5.3_sfoxds7t5ydpegc3knd667wn6m + rememo: 4.0.0 + remove-accents: 0.4.2 + traverse: 0.6.6 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + dev: false + /@wordpress/block-editor/9.8.0_vcke6catv4iqpjdw24uwvlzyyi: resolution: {integrity: sha512-zIPqEysaLFJMnVKU/yCoCEBT3Co9xsa4Ow91T/LI94ll3LeWG/pyiX4PSSQNTx74AqbcNO2p79LVON4FLdu+mQ==} engines: {node: '>=12'} @@ -15441,7 +16815,7 @@ packages: '@wordpress/is-shallow-equal': 4.19.0 '@wordpress/keyboard-shortcuts': 3.17.0_react@17.0.2 '@wordpress/keycodes': 3.28.0 - '@wordpress/notices': 3.19.0_react@17.0.2 + '@wordpress/notices': 3.28.0_react@17.0.2 '@wordpress/rich-text': 5.17.0_react@17.0.2 '@wordpress/shortcode': 3.19.0 '@wordpress/style-engine': 0.15.0 @@ -15494,7 +16868,7 @@ packages: '@wordpress/i18n': 4.28.0 '@wordpress/icons': 9.19.0 '@wordpress/keycodes': 3.28.0 - '@wordpress/notices': 3.19.0_react@17.0.2 + '@wordpress/notices': 3.28.0_react@17.0.2 '@wordpress/primitives': 3.17.0 '@wordpress/reusable-blocks': 3.17.0_vcke6catv4iqpjdw24uwvlzyyi '@wordpress/rich-text': 5.17.0_react@17.0.2 @@ -15610,6 +16984,60 @@ packages: engines: {node: '>=14'} dev: false + /@wordpress/components/19.12.0_eqi5qhcxfphl6j3pngzexvnehi: + resolution: {integrity: sha512-Ac1+aIMM7NDgN3G7i5kcaETSvZfeqB4U6PubApPmM6FdBF5VfkYUZeqNcC7cuJdveyokRrqHg11/l+DcJGA7/g==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@emotion/cache': 11.10.5 + '@emotion/css': 11.7.1_@babel+core@7.21.3 + '@emotion/react': 11.10.5_zg7wlf5auq2m3ro2gp4uufjvme + '@emotion/serialize': 1.1.1 + '@emotion/styled': 11.8.1_6t3indjc5ssefvr44gr3wo2uqu + '@emotion/utils': 1.0.0 + '@floating-ui/react-dom': 0.6.3_hiunvzosbwliizyirxfy6hjyim + '@use-gesture/react': 10.2.10_react@17.0.2 + '@wordpress/a11y': 3.28.0 + '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/date': 4.28.0 + '@wordpress/deprecated': 3.28.0 + '@wordpress/dom': 3.28.0 + '@wordpress/element': 4.20.0 + '@wordpress/escape-html': 2.28.0 + '@wordpress/hooks': 3.28.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/icons': 9.19.0 + '@wordpress/is-shallow-equal': 4.28.0 + '@wordpress/keycodes': 3.28.0 + '@wordpress/primitives': 3.26.0 + '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/warning': 2.28.0 + classnames: 2.3.1 + colord: 2.9.2 + dom-scroll-into-view: 1.2.1 + downshift: 6.1.12_react@17.0.2 + framer-motion: 6.2.8_sfoxds7t5ydpegc3knd667wn6m + gradient-parser: 0.1.5 + highlight-words-core: 1.2.2 + lodash: 4.17.21 + memize: 1.1.0 + moment: 2.29.4 + re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m + react: 17.0.2 + react-colorful: 5.5.1_sfoxds7t5ydpegc3knd667wn6m + react-dates: 21.8.0_nquzpvbbca3w4vywjbffgfreli + react-dom: 17.0.2_react@17.0.2 + reakit: 1.3.11_sfoxds7t5ydpegc3knd667wn6m + uuid: 8.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + - react-with-direction + dev: false + /@wordpress/components/19.12.0_tufdcic6wklrwyy3rhbsbktylu: resolution: {integrity: sha512-Ac1+aIMM7NDgN3G7i5kcaETSvZfeqB4U6PubApPmM6FdBF5VfkYUZeqNcC7cuJdveyokRrqHg11/l+DcJGA7/g==} engines: {node: '>=12'} @@ -15679,20 +17107,20 @@ packages: '@emotion/styled': 11.8.1_c2qm47vaialpqni522adyu6za4 '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.4.1 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.4.1 - '@wordpress/keycodes': 3.28.0 + '@wordpress/keycodes': 3.6.1 '@wordpress/primitives': 3.4.1 - '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/rich-text': 5.4.2_react@17.0.2 '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 @@ -15718,6 +17146,114 @@ packages: - react-with-direction dev: false + /@wordpress/components/19.8.5_eqi5qhcxfphl6j3pngzexvnehi: + resolution: {integrity: sha512-36d8fSk/nWfNv2nEZrC2gLx1rN9rGWFt425yXoH6JiakDvdXacN/04xcxZGBRkS+JDz6v22uyPMEol9TzwXOLg==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@emotion/cache': 11.10.5 + '@emotion/css': 11.7.1_@babel+core@7.21.3 + '@emotion/react': 11.10.5_zg7wlf5auq2m3ro2gp4uufjvme + '@emotion/serialize': 1.1.1 + '@emotion/styled': 11.8.1_6t3indjc5ssefvr44gr3wo2uqu + '@emotion/utils': 1.0.0 + '@use-gesture/react': 10.2.10_react@17.0.2 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/escape-html': 2.28.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 + '@wordpress/is-shallow-equal': 4.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 + classnames: 2.3.1 + colord: 2.9.2 + dom-scroll-into-view: 1.2.1 + downshift: 6.1.12_react@17.0.2 + framer-motion: 6.2.8_sfoxds7t5ydpegc3knd667wn6m + gradient-parser: 0.1.5 + highlight-words-core: 1.2.2 + lodash: 4.17.21 + memize: 1.1.0 + moment: 2.29.4 + re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m + react: 17.0.2 + react-colorful: 5.5.1_sfoxds7t5ydpegc3knd667wn6m + react-dates: 17.2.0_mbqv3i57zshgl3mhyvv367ttdu + react-dom: 17.0.2_react@17.0.2 + react-resize-aware: 3.1.1_react@17.0.2 + reakit: 1.3.11_sfoxds7t5ydpegc3knd667wn6m + uuid: 8.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + - react-with-direction + dev: false + + /@wordpress/components/19.8.5_ivjkhzvx5dt6opkkf6frl2zoam: + resolution: {integrity: sha512-36d8fSk/nWfNv2nEZrC2gLx1rN9rGWFt425yXoH6JiakDvdXacN/04xcxZGBRkS+JDz6v22uyPMEol9TzwXOLg==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@emotion/cache': 11.10.5 + '@emotion/css': 11.7.1_@babel+core@7.17.8 + '@emotion/react': 11.10.5_mcptgafjogap2nfvnfqvfwh6uu + '@emotion/serialize': 1.1.1 + '@emotion/styled': 11.8.1_c2qm47vaialpqni522adyu6za4 + '@emotion/utils': 1.0.0 + '@use-gesture/react': 10.2.10_react@17.0.2 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/escape-html': 2.28.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 + '@wordpress/is-shallow-equal': 4.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 + classnames: 2.3.1 + colord: 2.9.2 + dom-scroll-into-view: 1.2.1 + downshift: 6.1.12_react@17.0.2 + framer-motion: 6.2.8_sfoxds7t5ydpegc3knd667wn6m + gradient-parser: 0.1.5 + highlight-words-core: 1.2.2 + lodash: 4.17.21 + memize: 1.1.0 + moment: 2.29.4 + re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m + react: 17.0.2 + react-colorful: 5.5.1_sfoxds7t5ydpegc3knd667wn6m + react-dates: 17.2.0_mbqv3i57zshgl3mhyvv367ttdu + react-dom: 17.0.2_react@17.0.2 + react-resize-aware: 3.1.1_react@17.0.2 + reakit: 1.3.11_sfoxds7t5ydpegc3knd667wn6m + uuid: 8.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + - react-with-direction + dev: false + /@wordpress/components/19.8.5_rysvg2ttzfworbkpz2ftlx73d4: resolution: {integrity: sha512-36d8fSk/nWfNv2nEZrC2gLx1rN9rGWFt425yXoH6JiakDvdXacN/04xcxZGBRkS+JDz6v22uyPMEol9TzwXOLg==} engines: {node: '>=12'} @@ -15733,21 +17269,21 @@ packages: '@emotion/styled': 11.8.1_c2qm47vaialpqni522adyu6za4 '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 + '@wordpress/a11y': 3.6.1 '@wordpress/compose': 5.4.1_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/hooks': 3.28.0 + '@wordpress/hooks': 3.6.1 '@wordpress/i18n': 4.6.1 - '@wordpress/icons': 8.4.0 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/primitives': 3.26.0 - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/warning': 2.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 dom-scroll-into-view: 1.2.1 @@ -15787,21 +17323,21 @@ packages: '@emotion/styled': 11.8.1_hhesyqfwklnojgamcachhyxace '@emotion/utils': 1.0.0 '@use-gesture/react': 10.2.10_react@17.0.2 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/hooks': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/primitives': 3.26.0 - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/warning': 2.28.0 + '@wordpress/keycodes': 3.6.1 + '@wordpress/primitives': 3.4.1 + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/warning': 2.6.1 classnames: 2.3.1 colord: 2.9.2 dom-scroll-into-view: 1.2.1 @@ -15826,6 +17362,61 @@ packages: - react-with-direction dev: false + /@wordpress/components/20.0.0_mtk4wljkd5jimhszw4p7nnxuzm: + resolution: {integrity: sha512-RBPjtGLSoiV5YKhrBYh+/X8LbzbA99BJaB4Q+P0e1rVOwGzeBF3M7YEjmg1PrrzWaItqJZTvDoyZo+ql7c0KfA==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@emotion/cache': 11.10.5 + '@emotion/css': 11.7.1_@babel+core@7.21.3 + '@emotion/react': 11.10.5_zg7wlf5auq2m3ro2gp4uufjvme + '@emotion/serialize': 1.1.1 + '@emotion/styled': 11.8.1_6t3indjc5ssefvr44gr3wo2uqu + '@emotion/utils': 1.2.0 + '@floating-ui/react-dom': 1.0.0_sfoxds7t5ydpegc3knd667wn6m + '@use-gesture/react': 10.2.10_react@17.0.2 + '@wordpress/a11y': 3.28.0 + '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/date': 4.28.0 + '@wordpress/deprecated': 3.28.0 + '@wordpress/dom': 3.28.0 + '@wordpress/element': 4.20.0 + '@wordpress/escape-html': 2.28.0 + '@wordpress/hooks': 3.28.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/icons': 9.19.0 + '@wordpress/is-shallow-equal': 4.28.0 + '@wordpress/keycodes': 3.28.0 + '@wordpress/primitives': 3.26.0 + '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/warning': 2.28.0 + change-case: 4.1.2 + classnames: 2.3.1 + colord: 2.9.2 + date-fns: 2.29.3 + dom-scroll-into-view: 1.2.1 + downshift: 6.1.12_react@17.0.2 + framer-motion: 6.2.8_sfoxds7t5ydpegc3knd667wn6m + gradient-parser: 0.1.5 + highlight-words-core: 1.2.2 + lodash: 4.17.21 + memize: 1.1.0 + re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m + react: 17.0.2 + react-colorful: 5.5.1_sfoxds7t5ydpegc3knd667wn6m + react-dom: 17.0.2_react@17.0.2 + reakit: 1.3.11_sfoxds7t5ydpegc3knd667wn6m + remove-accents: 0.4.2 + use-lilius: 2.0.3_sfoxds7t5ydpegc3knd667wn6m + uuid: 8.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/react' + dev: false + /@wordpress/components/20.0.0_vcke6catv4iqpjdw24uwvlzyyi: resolution: {integrity: sha512-RBPjtGLSoiV5YKhrBYh+/X8LbzbA99BJaB4Q+P0e1rVOwGzeBF3M7YEjmg1PrrzWaItqJZTvDoyZo+ql7c0KfA==} engines: {node: '>=12'} @@ -15880,6 +17471,67 @@ packages: - '@babel/core' - '@types/react' + /@wordpress/components/21.2.0_mtk4wljkd5jimhszw4p7nnxuzm: + resolution: {integrity: sha512-pYz+EY+Tv/O2JuDBXpaFH/zv9Evty/e6NOGjOzddSeaShZ/mCq2DpUSWPuTFBEAjtv6h9HnpkakbNnEeio5yNA==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@emotion/cache': 11.10.5 + '@emotion/css': 11.7.1_@babel+core@7.21.3 + '@emotion/react': 11.10.5_zg7wlf5auq2m3ro2gp4uufjvme + '@emotion/serialize': 1.1.1 + '@emotion/styled': 11.8.1_6t3indjc5ssefvr44gr3wo2uqu + '@emotion/utils': 1.2.0 + '@floating-ui/react-dom': 1.0.0_sfoxds7t5ydpegc3knd667wn6m + '@use-gesture/react': 10.2.10_react@17.0.2 + '@wordpress/a11y': 3.28.0 + '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/date': 4.28.0 + '@wordpress/deprecated': 3.28.0 + '@wordpress/dom': 3.28.0 + '@wordpress/element': 4.20.0 + '@wordpress/escape-html': 2.28.0 + '@wordpress/hooks': 3.28.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/icons': 9.19.0 + '@wordpress/is-shallow-equal': 4.28.0 + '@wordpress/keycodes': 3.28.0 + '@wordpress/primitives': 3.26.0 + '@wordpress/rich-text': 5.17.0_react@17.0.2 + '@wordpress/warning': 2.28.0 + change-case: 4.1.2 + classnames: 2.3.1 + colord: 2.9.2 + date-fns: 2.29.3 + dom-scroll-into-view: 1.2.1 + downshift: 6.1.12_react@17.0.2 + framer-motion: 6.2.8_sfoxds7t5ydpegc3knd667wn6m + gradient-parser: 0.1.5 + highlight-words-core: 1.2.2 + lodash: 4.17.21 + memize: 1.1.0 + re-resizable: 6.9.5_sfoxds7t5ydpegc3knd667wn6m + react: 17.0.2 + react-colorful: 5.5.1_sfoxds7t5ydpegc3knd667wn6m + react-dom: 17.0.2_react@17.0.2 + reakit: 1.3.11_sfoxds7t5ydpegc3knd667wn6m + remove-accents: 0.4.2 + use-lilius: 2.0.3_sfoxds7t5ydpegc3knd667wn6m + uuid: 8.3.2 + valtio: 1.7.2_react@17.0.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/helper-module-imports' + - '@babel/types' + - '@types/react' + - aslemammad-vite-plugin-macro + - babel-plugin-macros + - vite + dev: false + /@wordpress/components/21.2.0_vcke6catv4iqpjdw24uwvlzyyi: resolution: {integrity: sha512-pYz+EY+Tv/O2JuDBXpaFH/zv9Evty/e6NOGjOzddSeaShZ/mCq2DpUSWPuTFBEAjtv6h9HnpkakbNnEeio5yNA==} engines: {node: '>=12'} @@ -15989,11 +17641,11 @@ packages: '@babel/runtime': 7.19.0 '@types/lodash': 4.14.184 '@types/mousetrap': 1.6.9 - '@wordpress/deprecated': 3.28.0 - '@wordpress/dom': 3.28.0 + '@wordpress/deprecated': 3.6.1 + '@wordpress/dom': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/keycodes': 3.28.0 + '@wordpress/keycodes': 3.6.1 '@wordpress/priority-queue': 2.28.0 clipboard: 2.0.10 lodash: 4.17.21 @@ -16021,7 +17673,6 @@ packages: mousetrap: 1.6.5 react: 17.0.2 use-memo-one: 1.1.2_react@17.0.2 - dev: false /@wordpress/core-data/4.4.5_react@17.0.2: resolution: {integrity: sha512-vhMbz/Q3xEMWTSFMs0D6n93qFSOhUZr/EgtRhLGRHdjskfgegFTlx13HrhDZ+U3xzkv1b8mH1klk4aZX+f0B8Q==} @@ -16030,15 +17681,15 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 + '@wordpress/api-fetch': 6.3.1 '@wordpress/blocks': 11.18.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/html-entities': 3.28.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/html-entities': 3.6.1 + '@wordpress/i18n': 4.6.1 '@wordpress/is-shallow-equal': 4.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/url': 3.7.1 equivalent-key-map: 0.2.2 lodash: 4.17.21 memize: 1.1.0 @@ -16115,9 +17766,9 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 + '@wordpress/api-fetch': 6.3.1 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 react: 17.0.2 dev: false @@ -16173,7 +17824,7 @@ packages: dependencies: '@babel/runtime': 7.19.0 '@wordpress/compose': 5.4.1_react@17.0.2 - '@wordpress/deprecated': 3.28.0 + '@wordpress/deprecated': 3.6.1 '@wordpress/element': 4.4.1 '@wordpress/is-shallow-equal': 4.28.0 '@wordpress/priority-queue': 2.28.0 @@ -16230,7 +17881,6 @@ packages: redux: 4.2.0 turbo-combine-reducers: 1.0.2 use-memo-one: 1.1.2_react@17.0.2 - dev: false /@wordpress/date/4.28.0: resolution: {integrity: sha512-NtKVryepjrYIKS1gRubCtJhcT++3KtiHuf9w1nNWnbY0Onk0pMQUXkZyVL2Bk1EZ3ylUx6S6k/TLOv0QVPxgzA==} @@ -16288,8 +17938,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/hooks': 3.28.0 - dev: false + '@wordpress/hooks': 3.6.1 /@wordpress/dom-ready/3.28.0: resolution: {integrity: sha512-PFFAnuPUouV0uSDZN6G/B8yksybtxzS/6H53OZJEA3h3EsNCicKRMGSowkumvLwXA23HV0K2Kht6JuS+bDECzA==} @@ -16323,7 +17972,6 @@ packages: dependencies: '@babel/runtime': 7.19.0 lodash: 4.17.21 - dev: false /@wordpress/e2e-test-utils/3.0.0_ddjhsfu4aotkh3cuzmpsln6ywq: resolution: {integrity: sha512-XMdR8DeKyDQRF5jKeUlOzP4pTRtoJuOLsNZRLUFUvnrs9y/7/hH17VmPbWp3TJGvV/eGKzO4+D+wJTsP9nJmIw==} @@ -16370,9 +18018,9 @@ packages: puppeteer-core: '>=11' dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 - '@wordpress/keycodes': 3.28.0 - '@wordpress/url': 3.29.0 + '@wordpress/api-fetch': 6.3.1 + '@wordpress/keycodes': 3.6.1 + '@wordpress/url': 3.7.1 form-data: 4.0.0 jest: 27.5.1 lodash: 4.17.21 @@ -16382,7 +18030,7 @@ packages: - encoding dev: false - /@wordpress/editor/12.5.10_tufdcic6wklrwyy3rhbsbktylu: + /@wordpress/editor/12.5.10_eqi5qhcxfphl6j3pngzexvnehi: resolution: {integrity: sha512-FEgNLDRAtOjGrXXNUXWucf3zMfM1rWCgc/eQrJFwj0atWGJmqQERvmF4H4jeUO6gqetOHmnko38fLVAnE7QWYw==} engines: {node: '>=12'} peerDependencies: @@ -16390,30 +18038,30 @@ packages: react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/api-fetch': 6.25.0 - '@wordpress/block-editor': 8.6.0_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/a11y': 3.6.1 + '@wordpress/api-fetch': 6.3.1 + '@wordpress/block-editor': 8.6.0_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/blocks': 11.18.0_react@17.0.2 - '@wordpress/components': 19.12.0_tufdcic6wklrwyy3rhbsbktylu - '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi + '@wordpress/compose': 5.4.1_react@17.0.2 '@wordpress/core-data': 4.4.5_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/date': 4.28.0 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/html-entities': 3.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 - '@wordpress/keyboard-shortcuts': 3.17.0_react@17.0.2 - '@wordpress/keycodes': 3.28.0 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/date': 4.6.1 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/hooks': 3.6.1 + '@wordpress/html-entities': 3.6.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 + '@wordpress/keyboard-shortcuts': 3.4.1_react@17.0.2 + '@wordpress/keycodes': 3.6.1 '@wordpress/media-utils': 3.4.1 - '@wordpress/notices': 3.28.0_react@17.0.2 - '@wordpress/preferences': 1.3.0_tufdcic6wklrwyy3rhbsbktylu - '@wordpress/reusable-blocks': 3.17.0_vcke6catv4iqpjdw24uwvlzyyi - '@wordpress/rich-text': 5.17.0_react@17.0.2 - '@wordpress/server-side-render': 3.17.0_vcke6catv4iqpjdw24uwvlzyyi - '@wordpress/url': 3.29.0 + '@wordpress/notices': 3.6.1_react@17.0.2 + '@wordpress/preferences': 1.3.0_eqi5qhcxfphl6j3pngzexvnehi + '@wordpress/reusable-blocks': 3.17.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/rich-text': 5.4.2_react@17.0.2 + '@wordpress/server-side-render': 3.17.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/url': 3.7.1 '@wordpress/wordcount': 3.28.0 classnames: 2.3.1 lodash: 4.17.21 @@ -16661,7 +18309,7 @@ packages: - typescript dev: true - /@wordpress/eslint-plugin/9.3.0_gvdiv7jt74qfcmw4bmvrh4kane: + /@wordpress/eslint-plugin/9.3.0_3xe5tjvuvwwvrozjb6pk7ussfi: resolution: {integrity: sha512-9F7B60gHAjiTIi9vBw5ZoH0MZW3UnmbuKols4kWpJVdgsvG4X1Wj6XXTLmQKrzh/Em7mD1CCIbCSyWknEzIOLw==} engines: {node: '>=12', npm: '>=6.9'} peerDependencies: @@ -16671,7 +18319,7 @@ packages: typescript: optional: true dependencies: - '@babel/eslint-parser': 7.17.0_xujkgafwcpm5gwokncqwvv5ure + '@babel/eslint-parser': 7.17.0_xrfyhdkbwxl52yb52lr5ltkqvm '@typescript-eslint/eslint-plugin': 4.33.0_k4l66av2tbo6kxzw52jzgbfzii '@typescript-eslint/parser': 4.33.0_yygwinqv3a2io74xmwofqb7uka '@wordpress/prettier-config': 1.1.3 @@ -16712,7 +18360,6 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - dev: false /@wordpress/html-entities/3.28.0: resolution: {integrity: sha512-UAaU6au8UTrSkowkV33pE/EvdPov2mA9W51vh6t88KsJPzt4171EzIchGnQuzt04HuZLdLyWy2A+7JCOSbfhBA==} @@ -16757,7 +18404,7 @@ packages: hasBin: true dependencies: '@babel/runtime': 7.17.7 - '@wordpress/hooks': 3.28.0 + '@wordpress/hooks': 3.6.1 gettext-parser: 1.4.0 lodash: 4.17.21 memize: 1.1.0 @@ -16771,20 +18418,19 @@ packages: hasBin: true dependencies: '@babel/runtime': 7.19.0 - '@wordpress/hooks': 3.28.0 + '@wordpress/hooks': 3.6.1 gettext-parser: 1.4.0 lodash: 4.17.21 memize: 1.1.0 sprintf-js: 1.1.2 tannin: 1.2.0 - dev: false /@wordpress/icons/8.1.0: resolution: {integrity: sha512-fNq0Mnzzf03uxIwKqQeU/G48wElyypwkhcBZWYQRpmwLZrOR231dxUeK9mzPOSGlYbgM+YKK+k3lzysGmrJU0A==} engines: {node: '>=12'} dependencies: '@babel/runtime': 7.17.7 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 '@wordpress/primitives': 3.4.1 dev: false @@ -16793,8 +18439,8 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/element': 4.20.0 - '@wordpress/primitives': 3.26.0 + '@wordpress/element': 4.4.1 + '@wordpress/primitives': 3.4.1 dev: false /@wordpress/icons/8.4.0: @@ -16814,7 +18460,7 @@ packages: '@wordpress/element': 5.5.0 '@wordpress/primitives': 3.26.0 - /@wordpress/interface/4.5.6_tufdcic6wklrwyy3rhbsbktylu: + /@wordpress/interface/4.5.6_eqi5qhcxfphl6j3pngzexvnehi: resolution: {integrity: sha512-Sige1gYGJOvD7UvKIUA4VCezFOxr157NCSQXn8/x2krjKybJzemI07ZJcTApawEYW0gutZbBizoUzaR8YLiiVA==} engines: {node: '>=12'} peerDependencies: @@ -16822,17 +18468,17 @@ packages: react-dom: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/components': 19.12.0_tufdcic6wklrwyy3rhbsbktylu - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/deprecated': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/components': 19.8.5_eqi5qhcxfphl6j3pngzexvnehi + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/deprecated': 3.6.1 + '@wordpress/element': 4.4.1 + '@wordpress/i18n': 4.6.1 + '@wordpress/icons': 8.2.3 '@wordpress/plugins': 4.4.3_react@17.0.2 - '@wordpress/preferences': 1.3.0_tufdcic6wklrwyy3rhbsbktylu - '@wordpress/viewport': 4.17.0_react@17.0.2 + '@wordpress/preferences': 1.3.0_eqi5qhcxfphl6j3pngzexvnehi + '@wordpress/viewport': 4.4.1_react@17.0.2 classnames: 2.3.1 lodash: 4.17.21 react: 17.0.2 @@ -16934,7 +18580,7 @@ packages: - supports-color dev: true - /@wordpress/jest-preset-default/7.1.3_3kt4xu3sgkhoqdvxwcvxppk7nm: + /@wordpress/jest-preset-default/7.1.3_32bilwwi7li3aoepmefcbmhmcy: resolution: {integrity: sha512-rz9V/YRr3TjLdZJQu7DAZHo848PpZ4N5ThtP4Lujy1O/UtcvtKF0r34SZTNDlFQO/G1USZQX/WL6HRhgl57iHA==} engines: {node: '>=12'} peerDependencies: @@ -16942,7 +18588,7 @@ packages: dependencies: '@wojtekmaj/enzyme-adapter-react-17': 0.6.6_7ltvq4e2railvf5uya4ffxpe2a '@wordpress/jest-console': 4.1.1_jest@26.6.3 - babel-jest: 26.6.3_@babel+core@7.17.8 + babel-jest: 26.6.3_@babel+core@7.21.3 enzyme: 3.11.0 enzyme-to-json: 3.6.2_enzyme@3.11.0 jest: 26.6.3 @@ -17014,9 +18660,9 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/element': 4.20.0 - '@wordpress/keycodes': 3.28.0 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/element': 4.4.1 + '@wordpress/keycodes': 3.6.1 lodash: 4.17.21 react: 17.0.2 rememo: 3.0.0 @@ -17042,7 +18688,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.17.7 - '@wordpress/i18n': 4.28.0 + '@wordpress/i18n': 4.6.1 lodash: 4.17.21 dev: false @@ -17051,33 +18697,21 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/i18n': 4.6.1 lodash: 4.17.21 - dev: false /@wordpress/media-utils/3.4.1: resolution: {integrity: sha512-WNAaMqqw6Eqy61KTWBy1NlgXSZH82Cm2SPVbz0v6yhJ4ktJmSRFm7Fd4mTMFS/L7NKTxwo+DFqEHlTGKj3lyzQ==} engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/api-fetch': 6.25.0 + '@wordpress/api-fetch': 6.3.1 '@wordpress/blob': 3.28.0 - '@wordpress/element': 4.20.0 - '@wordpress/i18n': 4.28.0 + '@wordpress/element': 4.4.1 + '@wordpress/i18n': 4.6.1 lodash: 4.17.21 dev: false - /@wordpress/notices/3.19.0_react@17.0.2: - resolution: {integrity: sha512-NXL5fpfUHPYd1AA9mq0e5xubBzRg1KblR0hXpzV7GBWf2ohM/417HJkBfbzC3HLONMkmuoWR0T9WexYP26qQqw==} - engines: {node: '>=12'} - peerDependencies: - react: ^17.0.0 - dependencies: - '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/data': 7.3.0_react@17.0.2 - react: 17.0.2 - /@wordpress/notices/3.28.0_react@17.0.2: resolution: {integrity: sha512-XftApWHyLlf2vq6FLYiqACoG4CxDsRqc6zQSjOA5UHQooVPbSsbYXl4eadloPtMnJohlzjzvb0SEIafjMyxjCA==} engines: {node: '>=12'} @@ -17087,7 +18721,6 @@ packages: '@wordpress/data': 8.5.0_react@17.0.2 transitivePeerDependencies: - react - dev: false /@wordpress/notices/3.6.1_react@17.0.2: resolution: {integrity: sha512-S+hOO+4NJJzaqcqm+XPa6uuvt/pkYjRz20HK3xt8Srb+HjO87D3X5feYGQMxEx5ueJl72+5/uOZwmXKJR4pzog==} @@ -17096,7 +18729,7 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 + '@wordpress/a11y': 3.6.1 '@wordpress/data': 6.6.1_react@17.0.2 lodash: 4.17.21 react: 17.0.2 @@ -17127,10 +18760,10 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/element': 4.20.0 - '@wordpress/hooks': 3.28.0 - '@wordpress/icons': 8.4.0 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/element': 4.4.1 + '@wordpress/hooks': 3.6.1 + '@wordpress/icons': 8.2.3 lodash: 4.17.21 memize: 1.1.0 react: 17.0.2 @@ -17163,7 +18796,7 @@ packages: peerDependencies: postcss: ^8.0.0 dependencies: - '@wordpress/base-styles': 4.8.0 + '@wordpress/base-styles': 4.3.1 autoprefixer: 10.4.4_postcss@8.4.12 postcss: 8.4.12 dev: false @@ -17171,7 +18804,7 @@ packages: /@wordpress/postcss-themes/1.0.5: resolution: {integrity: sha512-Oig71+VQG3UxLadd98oWMQfIqWrVY+G375/yKCHRklwEIZhKtAeK7qZlL1dEjdGPGvPXFeggB7KG5SGyrmdOZA==} dependencies: - '@babel/runtime': 7.17.7 + '@babel/runtime': 7.19.0 autoprefixer: 8.6.5 postcss: 6.0.23 postcss-color-function: 4.1.0 @@ -17186,7 +18819,7 @@ packages: postcss: 7.0.39 dev: true - /@wordpress/preferences/1.3.0_tufdcic6wklrwyy3rhbsbktylu: + /@wordpress/preferences/1.3.0_eqi5qhcxfphl6j3pngzexvnehi: resolution: {integrity: sha512-2ACfz6LkQY2oAcEgTVpkfpasywo/nSmN5jbpT2gNoF/W/RCFBso+VDyuLsfpJ1INbbq+6pPKLccLBWYAvwuFdA==} engines: {node: '>=12'} peerDependencies: @@ -17195,7 +18828,7 @@ packages: dependencies: '@babel/runtime': 7.19.0 '@wordpress/a11y': 3.28.0 - '@wordpress/components': 19.12.0_tufdcic6wklrwyy3rhbsbktylu + '@wordpress/components': 19.12.0_eqi5qhcxfphl6j3pngzexvnehi '@wordpress/data': 6.15.0_react@17.0.2 '@wordpress/i18n': 4.28.0 '@wordpress/icons': 8.4.0 @@ -17263,7 +18896,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - '@wordpress/element': 4.20.0 + '@wordpress/element': 4.4.1 classnames: 2.3.1 dev: false @@ -17293,7 +18926,6 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.19.0 - dev: false /@wordpress/react-i18n/3.8.0: resolution: {integrity: sha512-5jg7DY05jCWfzCZRt+VCT4cKn6mCZwQhQlJIApcuzUGT51tlLk/BwyxBMfnn5ZT5IVSp9YxedExycohNPXEPjg==} @@ -17326,6 +18958,35 @@ packages: redux: 4.2.0 rungen: 0.3.2 + /@wordpress/reusable-blocks/3.17.0_mtk4wljkd5jimhszw4p7nnxuzm: + resolution: {integrity: sha512-7ZfhtpWGvtT7xWqY/mCwC93zFHTVPQf8SZRjy2jAhcl7RNY6KZpW82rMRKNROEKJ4cYbTOMMf7WL2ulYi6cNFw==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@wordpress/block-editor': 10.2.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/blocks': 11.18.0_react@17.0.2 + '@wordpress/components': 21.2.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/core-data': 5.2.0_react@17.0.2 + '@wordpress/data': 7.3.0_react@17.0.2 + '@wordpress/element': 4.20.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/icons': 9.19.0 + '@wordpress/notices': 3.28.0_react@17.0.2 + '@wordpress/url': 3.29.0 + react: 17.0.2 + react-dom: 17.0.2_react@17.0.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/helper-module-imports' + - '@babel/types' + - '@types/react' + - aslemammad-vite-plugin-macro + - babel-plugin-macros + - vite + dev: false + /@wordpress/reusable-blocks/3.17.0_vcke6catv4iqpjdw24uwvlzyyi: resolution: {integrity: sha512-7ZfhtpWGvtT7xWqY/mCwC93zFHTVPQf8SZRjy2jAhcl7RNY6KZpW82rMRKNROEKJ4cYbTOMMf7WL2ulYi6cNFw==} engines: {node: '>=12'} @@ -17381,13 +19042,13 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/a11y': 3.28.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 - '@wordpress/element': 4.20.0 + '@wordpress/a11y': 3.6.1 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 + '@wordpress/element': 4.4.1 '@wordpress/escape-html': 2.28.0 - '@wordpress/i18n': 4.28.0 - '@wordpress/keycodes': 3.28.0 + '@wordpress/i18n': 4.6.1 + '@wordpress/keycodes': 3.6.1 lodash: 4.17.21 memize: 1.1.0 react: 17.0.2 @@ -17460,7 +19121,7 @@ packages: - webpack-command dev: true - /@wordpress/scripts/19.2.4_f7x7zdz3ccrnqxb4utvdtwqz4e: + /@wordpress/scripts/19.2.4_ew4zquq24ctm7afg5tumlrriou: resolution: {integrity: sha512-klkfjBOPfr/RT/3Tvmx+gLbZ+dxq5L0dJQHCHxEURMRW/A8SfJJPtmC29L9sE1KhO3zUMWxrkn2L6HhSzbvQbA==} engines: {node: '>=12.13', npm: '>=6.9'} hasBin: true @@ -17469,14 +19130,14 @@ packages: '@wordpress/babel-preset-default': 6.6.1 '@wordpress/browserslist-config': 4.1.3 '@wordpress/dependency-extraction-webpack-plugin': 3.4.1_webpack@5.70.0 - '@wordpress/eslint-plugin': 9.3.0_gvdiv7jt74qfcmw4bmvrh4kane - '@wordpress/jest-preset-default': 7.1.3_3kt4xu3sgkhoqdvxwcvxppk7nm + '@wordpress/eslint-plugin': 9.3.0_3xe5tjvuvwwvrozjb6pk7ussfi + '@wordpress/jest-preset-default': 7.1.3_32bilwwi7li3aoepmefcbmhmcy '@wordpress/npm-package-json-lint-config': 4.2.0_ngbyqqcq5j4itme2ewj5k5pf2y '@wordpress/postcss-plugins-preset': 3.10.0_postcss@8.4.12 '@wordpress/prettier-config': 1.1.3 '@wordpress/stylelint-config': 19.1.0_stylelint@13.13.1 - babel-jest: 26.6.3_@babel+core@7.17.8 - babel-loader: 8.2.3_7kihywspc3gmje7ccze4zrmvoq + babel-jest: 26.6.3_@babel+core@7.21.3 + babel-loader: 8.2.3_wxlqalhv5b6426466bgbroq3uq browserslist: 4.20.4 chalk: 4.1.2 check-node-version: 4.2.1 @@ -17544,6 +19205,36 @@ packages: - webpack-dev-server dev: true + /@wordpress/server-side-render/3.17.0_mtk4wljkd5jimhszw4p7nnxuzm: + resolution: {integrity: sha512-yJBM1hLl6n9w9X17deSsUc2Fbt/eBKDw2pzwbiPalKUGjP5RSKflzVb1uOwSr+KDUPo4vHj1hwkqO+RHssHHRg==} + engines: {node: '>=12'} + peerDependencies: + react: ^17.0.0 + react-dom: ^17.0.0 + dependencies: + '@babel/runtime': 7.19.0 + '@wordpress/api-fetch': 6.25.0 + '@wordpress/blocks': 11.18.0_react@17.0.2 + '@wordpress/components': 21.2.0_mtk4wljkd5jimhszw4p7nnxuzm + '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/data': 7.3.0_react@17.0.2 + '@wordpress/deprecated': 3.28.0 + '@wordpress/element': 4.20.0 + '@wordpress/i18n': 4.28.0 + '@wordpress/url': 3.29.0 + lodash: 4.17.21 + react: 17.0.2 + react-dom: 17.0.2_react@17.0.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/helper-module-imports' + - '@babel/types' + - '@types/react' + - aslemammad-vite-plugin-macro + - babel-plugin-macros + - vite + dev: false + /@wordpress/server-side-render/3.17.0_vcke6catv4iqpjdw24uwvlzyyi: resolution: {integrity: sha512-yJBM1hLl6n9w9X17deSsUc2Fbt/eBKDw2pzwbiPalKUGjP5RSKflzVb1uOwSr+KDUPo4vHj1hwkqO+RHssHHRg==} engines: {node: '>=12'} @@ -17683,7 +19374,6 @@ packages: dependencies: '@babel/runtime': 7.19.0 lodash: 4.17.21 - dev: false /@wordpress/viewport/4.17.0_react@17.0.2: resolution: {integrity: sha512-5FZCqXjsZjONoyCfjalRgdme//j4XJYHRXYh7ynoJW/qULq3YqZhyLtjFsEM4V+uuuURFSYnGnOD7V+K9wooPA==} @@ -17705,8 +19395,8 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.17.7 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 lodash: 4.17.21 react: 17.0.2 dev: false @@ -17718,8 +19408,8 @@ packages: react: ^17.0.0 dependencies: '@babel/runtime': 7.19.0 - '@wordpress/compose': 5.17.0_react@17.0.2 - '@wordpress/data': 6.15.0_react@17.0.2 + '@wordpress/compose': 5.4.1_react@17.0.2 + '@wordpress/data': 6.6.1_react@17.0.2 lodash: 4.17.21 react: 17.0.2 dev: false @@ -17744,7 +19434,6 @@ packages: /@wordpress/warning/2.6.1: resolution: {integrity: sha512-Xs37x0IkvNewPNKs1A8cnw5xLb+AqwUqqCsH4+5Sjat5GDqP86mHgLfRIlE4d6fBYg+q6tO7DVPG49TT3/wzgA==} engines: {node: '>=12'} - dev: false /@wordpress/wordcount/3.19.0: resolution: {integrity: sha512-x5M997RMrglq/XiGi55sO4fIPrGu20bob6h5goc9NKbbq68NTTDPrznfRbhQ+gTLLEV79AtUO/RPK3y9V9Pvkw==} @@ -18060,7 +19749,6 @@ packages: /ansi-colors/4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} - dev: true /ansi-escapes/3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} @@ -18260,6 +19948,10 @@ packages: /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + /array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: true + /array-includes/3.1.4: resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} engines: {node: '>= 0.4'} @@ -18599,9 +20291,9 @@ packages: eslint: '>= 4.12.1' dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 eslint: 7.32.0 eslint-visitor-keys: 1.3.0 resolve: 1.22.1 @@ -18659,18 +20351,18 @@ packages: babel-types: 6.26.0 dev: true - /babel-jest/24.9.0_@babel+core@7.17.8: + /babel-jest/24.9.0_@babel+core@7.21.3: resolution: {integrity: sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==} engines: {node: '>= 6'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/transform': 24.9.0 '@jest/types': 24.9.0 '@types/babel__core': 7.1.16 babel-plugin-istanbul: 5.2.0 - babel-preset-jest: 24.9.0_@babel+core@7.17.8 + babel-preset-jest: 24.9.0_@babel+core@7.21.3 chalk: 2.4.2 slash: 2.0.0 transitivePeerDependencies: @@ -18696,6 +20388,25 @@ packages: - supports-color dev: true + /babel-jest/25.5.1_@babel+core@7.21.3: + resolution: {integrity: sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==} + engines: {node: '>= 8.3'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@jest/transform': 25.5.1 + '@jest/types': 25.5.0 + '@types/babel__core': 7.1.16 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 25.5.0_@babel+core@7.21.3 + chalk: 3.0.0 + graceful-fs: 4.2.9 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-jest/26.6.3_@babel+core@7.12.9: resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} engines: {node: '>= 10.14.2'} @@ -18715,18 +20426,18 @@ packages: - supports-color dev: false - /babel-jest/26.6.3_@babel+core@7.17.8: + /babel-jest/26.6.3_@babel+core@7.21.3: resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} engines: {node: '>= 10.14.2'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 '@types/babel__core': 7.1.16 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 26.6.2_@babel+core@7.17.8 + babel-preset-jest: 26.6.2_@babel+core@7.21.3 chalk: 4.1.2 graceful-fs: 4.2.9 slash: 3.0.0 @@ -18751,6 +20462,25 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color + dev: true + + /babel-jest/27.5.1_@babel+core@7.21.3: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.21.3 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.1.16 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1_@babel+core@7.21.3 + chalk: 4.1.2 + graceful-fs: 4.2.9 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color /babel-loader/8.2.3_2p3p4wasefxeg63hu27rmsqfnq: resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==} @@ -18797,6 +20527,36 @@ packages: webpack: 4.46.0_webpack-cli@3.3.12 dev: true + /babel-loader/8.2.3_wxlqalhv5b6426466bgbroq3uq: + resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.21.3 + find-cache-dir: 3.3.2 + loader-utils: 1.4.0 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.70.0_bgqcrdgdviybk52kjcpjat65sa + dev: true + + /babel-loader/8.2.3_y3c3uzyfhmxjbwhc6k6hyxg3aa: + resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.21.3 + find-cache-dir: 3.3.2 + loader-utils: 1.4.0 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.46.0 + dev: true + /babel-messages/6.23.0: resolution: {integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=} dependencies: @@ -18878,8 +20638,8 @@ packages: resolution: {integrity: sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==} engines: {node: '>= 8.3'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/types': 7.21.3 '@types/babel__traverse': 7.14.2 dev: true @@ -18887,8 +20647,8 @@ packages: resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/types': 7.21.3 '@types/babel__core': 7.1.16 '@types/babel__traverse': 7.14.2 @@ -18896,8 +20656,8 @@ packages: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.19.3 + '@babel/template': 7.20.7 + '@babel/types': 7.21.3 '@types/babel__core': 7.1.16 '@types/babel__traverse': 7.14.2 @@ -18925,12 +20685,20 @@ packages: '@babel/core': 7.17.8 dev: true + /babel-plugin-named-asset-import/0.3.8_@babel+core@7.21.3: + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.21.3 + dev: true + /babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.12.9: resolution: {integrity: sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.12.9 semver: 6.3.0 @@ -18943,7 +20711,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.16.12 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.16.12 semver: 6.3.0 @@ -18951,14 +20719,14 @@ packages: - supports-color dev: false - /babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.17.8: + /babel-plugin-polyfill-corejs2/0.3.0_@babel+core@7.21.3: resolution: {integrity: sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -18969,24 +20737,50 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.12.9 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.12.9 semver: 6.3.0 transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.16.12: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.16.12 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.16.12 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.17.8: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.19.3 + '@babel/compat-data': 7.21.0 '@babel/core': 7.17.8 '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true + + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.3: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.17.8: resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} @@ -19000,6 +20794,18 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.21.3: + resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.21.3 + core-js-compat: 3.25.5 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-corejs3/0.4.0_@babel+core@7.12.9: resolution: {integrity: sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==} peerDependencies: @@ -19024,13 +20830,13 @@ packages: - supports-color dev: false - /babel-plugin-polyfill-corejs3/0.4.0_@babel+core@7.17.8: + /babel-plugin-polyfill-corejs3/0.4.0_@babel+core@7.21.3: resolution: {integrity: sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 core-js-compat: 3.25.5 transitivePeerDependencies: - supports-color @@ -19072,6 +20878,18 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-corejs3/0.5.2_@babel+core@7.21.3: + resolution: {integrity: sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 + core-js-compat: 3.25.5 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.12.9: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: @@ -19083,13 +20901,13 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.17.8: + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.3: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 core-js-compat: 3.25.5 transitivePeerDependencies: - supports-color @@ -19127,6 +20945,17 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-regenerator/0.3.0_@babel+core@7.21.3: + resolution: {integrity: sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.12.9: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: @@ -19137,13 +20966,13 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.17.8: + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.3: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.8 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.3 transitivePeerDependencies: - supports-color @@ -19204,6 +21033,25 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 dev: true + /babel-preset-current-node-syntax/0.1.4_@babel+core@7.21.3: + resolution: {integrity: sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + dev: true + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.12.9: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -19242,6 +21090,26 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.8 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.8 + dev: true + + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.3: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.3 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.3 /babel-preset-fbjs/3.4.0_@babel+core@7.12.9: resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} @@ -19279,50 +21147,50 @@ packages: transitivePeerDependencies: - supports-color - /babel-preset-fbjs/3.4.0_@babel+core@7.17.8: + /babel-preset-fbjs/3.4.0_@babel+core@7.21.3: resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.8 - '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.3 + '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 transitivePeerDependencies: - supports-color - /babel-preset-jest/24.9.0_@babel+core@7.17.8: + /babel-preset-jest/24.9.0_@babel+core@7.21.3: resolution: {integrity: sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==} engines: {node: '>= 6'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.3 babel-plugin-jest-hoist: 24.9.0 dev: false @@ -19337,6 +21205,17 @@ packages: babel-preset-current-node-syntax: 0.1.4_@babel+core@7.17.8 dev: true + /babel-preset-jest/25.5.0_@babel+core@7.21.3: + resolution: {integrity: sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==} + engines: {node: '>= 8.3'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + babel-plugin-jest-hoist: 25.5.0 + babel-preset-current-node-syntax: 0.1.4_@babel+core@7.21.3 + dev: true + /babel-preset-jest/26.6.2_@babel+core@7.12.9: resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} @@ -19348,15 +21227,15 @@ packages: babel-preset-current-node-syntax: 1.0.1_@babel+core@7.12.9 dev: false - /babel-preset-jest/26.6.2_@babel+core@7.17.8: + /babel-preset-jest/26.6.2_@babel+core@7.21.3: resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 babel-plugin-jest-hoist: 26.6.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.8 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 dev: true /babel-preset-jest/27.5.1_@babel+core@7.17.8: @@ -19368,6 +21247,17 @@ packages: '@babel/core': 7.17.8 babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.8 + dev: true + + /babel-preset-jest/27.5.1_@babel+core@7.21.3: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.3 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 /babel-runtime/6.26.0: resolution: {integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=} @@ -19466,6 +21356,10 @@ packages: resolution: {integrity: sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=} dev: true + /batch/0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: true + /bcrypt-pbkdf/1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: @@ -19590,6 +21484,15 @@ packages: safe-json-parse: 1.0.1 dev: true + /bonjour-service/1.1.0: + resolution: {integrity: sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==} + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: true + /boolbase/1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -19767,7 +21670,7 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001418 + caniuse-lite: 1.0.30001146 electron-to-chromium: 1.4.276 dev: true @@ -20107,14 +22010,13 @@ packages: /caniuse-api/3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001418 + browserslist: 4.19.3 + caniuse-lite: 1.0.30001146 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 /caniuse-lite/1.0.30001146: resolution: {integrity: sha512-VAy5RHDfTJhpxnDdp2n40GPPLp3KqNrXz1QqFv4J64HvArKs8nuNMOWkB3ICOaBTU/Aj4rYAo/ytdQDDFF/Pug==} - dev: true /caniuse-lite/1.0.30001352: resolution: {integrity: sha512-GUgH8w6YergqPQDGWhJGt8GDRnY0L/iJVQcU3eJ46GYf52R8tk0Wxp0PymuFVZboJYXGiCqwozAYZNRjVj6IcA==} @@ -20985,7 +22887,7 @@ packages: resolution: {integrity: sha512-T3RmZQEAji5KYqUQpziWtyGJFli6Khz7h0rpxDwYNjSkr5ynyTWwO7WpfjHzTXclNCDfSWQRcwMb+NwxJesCKw==} engines: {node: '>= 6.0.0'} dependencies: - json5: 2.2.0 + json5: 2.2.3 dev: false /config/3.3.7: @@ -21006,6 +22908,11 @@ packages: xdg-basedir: 3.0.0 dev: true + /connect-history-api-fallback/2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: true + /connect/3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -21125,7 +23032,7 @@ packages: /core-js-compat/3.19.1: resolution: {integrity: sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 semver: 7.0.0 /core-js-compat/3.21.1: @@ -21133,15 +23040,15 @@ packages: dependencies: browserslist: 4.19.3 semver: 7.0.0 + dev: true /core-js-compat/3.25.5: resolution: {integrity: sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==} dependencies: browserslist: 4.21.4 - /core-js-pure/3.19.1: - resolution: {integrity: sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==} - deprecated: core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure. + /core-js-pure/3.29.1: + resolution: {integrity: sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==} requiresBuild: true /core-js/1.2.7: @@ -21153,7 +23060,6 @@ packages: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. requiresBuild: true - dev: true /core-js/3.21.1: resolution: {integrity: sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==} @@ -21437,7 +23343,7 @@ packages: webpack: ^4.27.0 || ^5.0.0 dependencies: icss-utils: 5.1.0_postcss@8.4.12 - loader-utils: 2.0.2 + loader-utils: 2.0.4 postcss: 8.4.12 postcss-modules-extract-imports: 3.0.0_postcss@8.4.12 postcss-modules-local-by-default: 4.0.0_postcss@8.4.12 @@ -21509,7 +23415,7 @@ packages: engines: {node: '>= 6'} /css.escape/1.5.1: - resolution: {integrity: sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=} + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} /css/3.0.0: resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} @@ -22023,6 +23929,13 @@ packages: resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} + /default-gateway/6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: true + /default-require-extensions/1.0.0: resolution: {integrity: sha512-Dn2eAftOqXhNXs5f/Xjn7QTZ6kDYkx7u0EXQInN1oyYwsZysu11q7oTtaKcbzLxZRJiDHa8VmwpWmb4lY5FqgA==} engines: {node: '>=0.10.0'} @@ -22042,7 +23955,6 @@ packages: /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - dev: false /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} @@ -22153,7 +24065,6 @@ packages: /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: false /detect-port/1.3.0: resolution: {integrity: sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==} @@ -22249,6 +24160,17 @@ packages: /discontinuous-range/1.0.0: resolution: {integrity: sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=} + /dns-equal/1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: true + + /dns-packet/5.4.0: + resolution: {integrity: sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: true + /docker-compose/0.22.2: resolution: {integrity: sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==} engines: {node: '>= 6.0.0'} @@ -22614,7 +24536,6 @@ packages: engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.1 - dev: true /entities/1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} @@ -23099,9 +25020,9 @@ packages: has: 1.0.3 is-core-module: 2.8.0 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.0.4 object.values: 1.1.5 - resolve: 1.22.1 + resolve: 1.20.0 tsconfig-paths: 3.14.0 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -23130,9 +25051,9 @@ packages: has: 1.0.3 is-core-module: 2.8.0 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.0.4 object.values: 1.1.5 - resolve: 1.22.1 + resolve: 1.20.0 tsconfig-paths: 3.14.0 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -23890,8 +25811,8 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 c8: 7.11.0 transitivePeerDependencies: - supports-color @@ -24362,6 +26283,13 @@ packages: websocket-driver: 0.7.4 dev: true + /faye-websocket/0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: true + /fb-watchman/2.0.1: resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} dependencies: @@ -24427,7 +26355,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.2 + loader-utils: 2.0.4 schema-utils: 3.1.1 webpack: 4.46.0 dev: true @@ -24749,6 +26677,18 @@ packages: debug: optional: true + /follow-redirects/1.14.7_debug@4.3.3: + resolution: {integrity: sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.3 + dev: true + /follow-redirects/1.5.10: resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} engines: {node: '>=4.0'} @@ -26009,6 +27949,10 @@ packages: duplexer: 0.1.2 dev: true + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: true + /handlebars/4.7.7: resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} engines: {node: '>=0.4.7'} @@ -26302,6 +28246,15 @@ packages: lru-cache: 6.0.0 dev: true + /hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: true + /hpq/1.3.0: resolution: {integrity: sha512-fvYTvdCFOWQupGxqkahrkA+ERBuMdzkxwtUdKrxR6rmMd4Pfl+iZ1QiQYoaZ0B/v0y59MOMnz3XFUWbT50/NWA==} @@ -26443,6 +28396,20 @@ packages: transitivePeerDependencies: - supports-color + /http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: true + + /http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -26478,6 +28445,36 @@ packages: - supports-color dev: true + /http-proxy-middleware/2.0.6_fs2s5z67bp6aaux2wfl66yxz5e: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.14 + '@types/http-proxy': 1.17.10 + http-proxy: 1.18.1_debug@4.3.3 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.4 + transitivePeerDependencies: + - debug + dev: true + + /http-proxy/1.18.1_debug@4.3.3: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.14.7_debug@4.3.3 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: true + /http-reasons/0.1.0: resolution: {integrity: sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==} dev: false @@ -26612,7 +28609,7 @@ packages: '@automattic/interpolate-components': 1.2.1_pxzommwrsowkd4kgag6q3sluym '@babel/runtime': 7.19.0 '@tannin/sprintf': 1.2.0 - '@wordpress/compose': 5.17.0_react@17.0.2 + '@wordpress/compose': 5.4.1_react@17.0.2 debug: 4.3.4 events: 3.3.0 hash.js: 1.1.7 @@ -26845,7 +28842,7 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.5.5 + rxjs: 7.8.0 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -26908,6 +28905,11 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + /ipaddr.js/2.0.1: + resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + engines: {node: '>= 10'} + dev: true + /irregular-plurals/3.3.0: resolution: {integrity: sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==} engines: {node: '>=8'} @@ -27561,11 +29563,11 @@ packages: resolution: {integrity: sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==} engines: {node: '>=6'} dependencies: - '@babel/generator': 7.19.3 - '@babel/parser': 7.19.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 istanbul-lib-coverage: 2.0.5 semver: 6.3.0 transitivePeerDependencies: @@ -27576,7 +29578,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -27588,8 +29590,8 @@ packages: resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.8 - '@babel/parser': 7.19.3 + '@babel/core': 7.21.3 + '@babel/parser': 7.21.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -27764,7 +29766,7 @@ packages: resolution: {integrity: sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/traverse': 7.19.3 + '@babel/traverse': 7.21.3 '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 @@ -27958,10 +29960,10 @@ packages: resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==} engines: {node: '>= 6'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/test-sequencer': 24.9.0 '@jest/types': 24.9.0 - babel-jest: 24.9.0_@babel+core@7.17.8 + babel-jest: 24.9.0_@babel+core@7.21.3 chalk: 2.4.2 glob: 7.2.0 jest-environment-jsdom: 24.9.0 @@ -27985,10 +29987,10 @@ packages: resolution: {integrity: sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==} engines: {node: '>= 8.3'} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/test-sequencer': 25.5.4 '@jest/types': 25.5.0 - babel-jest: 25.5.1_@babel+core@7.17.8 + babel-jest: 25.5.1_@babel+core@7.21.3 chalk: 3.0.0 deepmerge: 4.3.0 glob: 7.2.0 @@ -28020,10 +30022,10 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/test-sequencer': 26.6.3 '@jest/types': 26.6.2 - babel-jest: 26.6.3_@babel+core@7.17.8 + babel-jest: 26.6.3_@babel+core@7.21.3 chalk: 4.1.2 deepmerge: 4.3.0 glob: 7.2.0 @@ -28054,10 +30056,10 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1_@babel+core@7.17.8 + babel-jest: 27.5.1_@babel+core@7.21.3 chalk: 4.1.2 ci-info: 3.2.0 deepmerge: 4.3.0 @@ -28467,7 +30469,7 @@ packages: resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==} engines: {node: '>= 6'} dependencies: - '@babel/traverse': 7.19.3 + '@babel/traverse': 7.21.3 '@jest/environment': 24.9.0 '@jest/test-result': 24.9.0 '@jest/types': 24.9.0 @@ -28491,7 +30493,7 @@ packages: resolution: {integrity: sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==} engines: {node: '>= 8.3'} dependencies: - '@babel/traverse': 7.19.3 + '@babel/traverse': 7.21.3 '@jest/environment': 25.5.0 '@jest/source-map': 25.5.0 '@jest/test-result': 25.5.0 @@ -28519,7 +30521,7 @@ packages: resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/traverse': 7.19.3 + '@babel/traverse': 7.21.3 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 @@ -29227,7 +31229,7 @@ packages: resolution: {integrity: sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==} engines: {node: '>= 6'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 '@jest/types': 24.9.0 chalk: 2.4.2 expect: 24.9.0 @@ -29248,7 +31250,7 @@ packages: resolution: {integrity: sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==} engines: {node: '>= 8.3'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 '@jest/types': 25.5.0 '@types/prettier': 1.19.1 chalk: 3.0.0 @@ -29269,7 +31271,7 @@ packages: resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.21.3 '@jest/types': 26.6.2 '@types/babel__traverse': 7.14.2 '@types/prettier': 2.4.2 @@ -29293,16 +31295,16 @@ packages: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.17.8 - '@babel/generator': 7.19.3 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.17.8 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.21.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.14.2 '@types/prettier': 2.4.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.8 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.3 chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.9 @@ -29704,7 +31706,7 @@ packages: '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.8 '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.8 '@babel/plugin-transform-modules-commonjs': 7.17.7_@babel+core@7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 '@babel/preset-flow': 7.16.7_@babel+core@7.17.8 '@babel/preset-typescript': 7.16.7_@babel+core@7.17.8 '@babel/register': 7.18.9_@babel+core@7.17.8 @@ -29927,6 +31929,11 @@ packages: dependencies: minimist: 1.2.5 + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + /jsonc-parser/2.2.1: resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} dev: true @@ -30057,6 +32064,13 @@ packages: package-json: 4.0.1 dev: true + /launch-editor/2.6.0: + resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} + dependencies: + picocolors: 1.0.0 + shell-quote: 1.7.3 + dev: true + /lazy-cache/0.2.7: resolution: {integrity: sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==} engines: {node: '>=0.10.0'} @@ -30190,7 +32204,7 @@ packages: log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.5.5 + rxjs: 7.8.0 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -30274,7 +32288,7 @@ packages: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 - json5: 2.2.0 + json5: 2.2.3 dev: true /loader-utils/2.0.2: @@ -30283,7 +32297,16 @@ packages: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 - json5: 2.2.0 + json5: 2.2.3 + + /loader-utils/2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: true /locate-path/2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} @@ -30536,7 +32559,6 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: true /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -30930,6 +32952,13 @@ packages: fs-monkey: 1.0.3 dev: true + /memfs/3.4.13: + resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: true + /memize/1.1.0: resolution: {integrity: sha512-K4FcPETOMTwe7KL2LK0orMhpOmWD2wRGwWWpbZy0fyArwsyIKR8YJVz8+efBAh3BO4zPqlSICu4vsLTRRqtFAg==} @@ -31053,7 +33082,7 @@ packages: /metro-babel-transformer/0.72.1: resolution: {integrity: sha512-VK7A9gepnhrKC0DMoxtPjYYHjkkfNwzLMYJgeL6Il6IaX/K/VHTILSEqgpxfNDos2jrXazuR5+rXDLE/RCzqmw==} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 hermes-parser: 0.8.0 metro-source-map: 0.72.1 nullthrows: 1.1.1 @@ -31063,7 +33092,7 @@ packages: /metro-babel-transformer/0.72.2: resolution: {integrity: sha512-3Bxk/MoXHn/ysmsH7ov6inDHrSWz5eowYRGzilOSSXe9y3DJ/ceTHfT+DWsPr9IgTJLQfKVN/F0pZ+1Ndqh52A==} dependencies: - '@babel/core': 7.17.8 + '@babel/core': 7.21.3 hermes-parser: 0.8.0 metro-source-map: 0.72.2 nullthrows: 1.1.1 @@ -31183,54 +33212,54 @@ packages: '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.12.9 '@babel/plugin-transform-typescript': 7.19.3_@babel+core@7.12.9 '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.12.9 - '@babel/template': 7.18.10 + '@babel/template': 7.20.7 react-refresh: 0.4.3 transitivePeerDependencies: - supports-color - /metro-react-native-babel-preset/0.72.2_@babel+core@7.17.8: + /metro-react-native-babel-preset/0.72.2_@babel+core@7.21.3: resolution: {integrity: sha512-OMp77TUUZAoiuUv5uKNc08AnJNQxD28k92eQvo8tPcA8Wx6OZlEUvL7M7SFkef2mEYJ0vnrRjOamSnbBuq/+1w==} peerDependencies: '@babel/core': '*' dependencies: - '@babel/core': 7.17.8 - '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.17.8 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.8 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.17.8 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.17.8 - '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.17.8 - '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.17.8 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-runtime': 7.19.1_@babel+core@7.17.8 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.17.8 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.17.8 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.17.8 - '@babel/plugin-transform-typescript': 7.19.3_@babel+core@7.17.8 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.17.8 - '@babel/template': 7.18.10 + '@babel/core': 7.21.3 + '@babel/plugin-proposal-async-generator-functions': 7.19.1_@babel+core@7.21.3 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-object-rest-spread': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.3 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-block-scoping': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-destructuring': 7.18.13_@babel+core@7.21.3 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-modules-commonjs': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.21.3 + '@babel/plugin-transform-parameters': 7.18.8_@babel+core@7.21.3 + '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-runtime': 7.19.1_@babel+core@7.21.3 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.21.3 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.3 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.3 + '@babel/plugin-transform-typescript': 7.19.3_@babel+core@7.21.3 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.3 + '@babel/template': 7.20.7 react-refresh: 0.4.3 transitivePeerDependencies: - supports-color @@ -31270,8 +33299,8 @@ packages: /metro-source-map/0.72.1: resolution: {integrity: sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA==} dependencies: - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 invariant: 2.2.4 metro-symbolicate: 0.72.1 nullthrows: 1.1.1 @@ -31284,8 +33313,8 @@ packages: /metro-source-map/0.72.2: resolution: {integrity: sha512-dqYK8DZ4NzGkhik0IkKRBLuPplXqF6GoKrFQ/XMw0FYGy3+dFJ9nIDxsCyg3GcjCt6Mg8FEqGrXlpMG7MrtC9Q==} dependencies: - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 invariant: 2.2.4 metro-symbolicate: 0.72.2 nullthrows: 1.1.1 @@ -31326,10 +33355,10 @@ packages: /metro-transform-plugins/0.72.2: resolution: {integrity: sha512-f2Zt6ti156TWFrnCRg7vxBIHBJcERBX8nwKmRKGFCbU+rk4YOxwONY4Y0Gn9Kocfu313P1xNqWYH5rCqvEWMaQ==} dependencies: - '@babel/core': 7.17.8 - '@babel/generator': 7.19.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color @@ -31337,11 +33366,11 @@ packages: /metro-transform-worker/0.72.2: resolution: {integrity: sha512-z5OOnEO3NV6PgI8ORIBvJ5m+u9THFpy+6WIg/MUjP9k1oqasWaP1Rfhv7K/a+MD6uho1rgXj6nwWDqybsqHY/w==} dependencies: - '@babel/core': 7.17.8 - '@babel/generator': 7.19.3 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 - babel-preset-fbjs: 3.4.0_@babel+core@7.17.8 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 + babel-preset-fbjs: 3.4.0_@babel+core@7.21.3 metro: 0.72.2 metro-babel-transformer: 0.72.2 metro-cache: 0.72.2 @@ -31361,12 +33390,12 @@ packages: hasBin: true dependencies: '@babel/code-frame': 7.18.6 - '@babel/core': 7.17.8 - '@babel/generator': 7.19.3 - '@babel/parser': 7.19.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 absolute-path: 0.0.0 accepts: 1.3.8 async: 3.2.4 @@ -31392,7 +33421,7 @@ packages: metro-hermes-compiler: 0.72.2 metro-inspector-proxy: 0.72.2 metro-minify-uglify: 0.72.2 - metro-react-native-babel-preset: 0.72.2_@babel+core@7.17.8 + metro-react-native-babel-preset: 0.72.2_@babel+core@7.21.3 metro-resolver: 0.72.2 metro-runtime: 0.72.2 metro-source-map: 0.72.2 @@ -31596,7 +33625,6 @@ packages: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 - dev: true /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -31852,6 +33880,14 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /multicast-dns/7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + dependencies: + dns-packet: 5.4.0 + thunky: 1.1.0 + dev: true + /multimatch/5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} @@ -32032,6 +34068,11 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-forge/1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: true + /node-gyp/8.4.1: resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} engines: {node: '>= 10.12.0'} @@ -32538,6 +34579,10 @@ packages: resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} dev: false + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: true + /oclif/2.7.0_7yoz4vugw4qcykie6sit5r22dm: resolution: {integrity: sha512-nmgk/emtEth/0RYTMeovj22zpiT4P7KvIDc3OOT8VeAEDvdbnZfg3tV3YRnHK0zrSKETKqpHWFyNx2PLMl0eKQ==} engines: {node: '>=12.0.0'} @@ -32634,7 +34679,6 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: false /opener/1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} @@ -32858,7 +34902,6 @@ packages: dependencies: '@types/retry': 0.12.1 retry: 0.13.1 - dev: false /p-timeout/3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} @@ -33375,7 +35418,7 @@ packages: resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 color: 3.2.1 has: 1.0.3 postcss: 7.0.39 @@ -33387,7 +35430,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 colord: 2.9.2 postcss: 8.4.12 @@ -33551,7 +35594,7 @@ packages: postcss: 8.4.12 schema-utils: 3.1.1 semver: 7.3.8 - webpack: 5.70.0_webpack-cli@3.3.12 + webpack: 5.70.0 /postcss-loader/6.2.1_wn4p5kzkgq2ohl66pfawxjf2x4: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} @@ -33595,7 +35638,7 @@ packages: resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.39 @@ -33608,7 +35651,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 cssnano-utils: 3.1.0_postcss@8.4.12 postcss: 8.4.12 @@ -33662,7 +35705,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: alphanum-sort: 1.0.2 - browserslist: 4.21.4 + browserslist: 4.19.3 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -33674,7 +35717,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 cssnano-utils: 3.1.0_postcss@8.4.12 postcss: 8.4.12 postcss-value-parser: 4.2.0 @@ -33879,7 +35922,7 @@ packages: resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -33889,7 +35932,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 8.4.12 postcss-value-parser: 4.2.0 dev: true @@ -33954,7 +35997,7 @@ packages: resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 has: 1.0.3 postcss: 7.0.39 @@ -33965,7 +36008,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 caniuse-api: 3.0.0 postcss: 8.4.12 dev: true @@ -34749,7 +36792,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.2 + loader-utils: 2.0.4 schema-utils: 3.1.1 webpack: 4.46.0 dev: true @@ -34967,7 +37010,7 @@ packages: is-touch-device: 1.0.1 lodash: 4.17.21 moment: 2.29.4 - object.assign: 4.1.4 + object.assign: 4.1.2 object.values: 1.1.5 prop-types: 15.8.1 raf: 3.4.1 @@ -35003,8 +37046,8 @@ packages: engines: {node: '>=8.10.0'} hasBin: true dependencies: - '@babel/core': 7.17.8 - '@babel/generator': 7.19.3 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 '@babel/runtime': 7.19.0 ast-types: 0.14.2 commander: 2.20.3 @@ -35186,7 +37229,7 @@ packages: /react-native-codegen/0.70.4_@babel+preset-env@7.12.7: resolution: {integrity: sha512-bPyd5jm840omfx24VRyMP+KPzAefpRDwE18w5ywMWHCWZBSqLn1qI9WgBPnavlIrjTEuzxznWQNcaA26lw8AMQ==} dependencies: - '@babel/parser': 7.19.3 + '@babel/parser': 7.21.3 flow-parser: 0.121.0 jscodeshift: 0.13.1_@babel+preset-env@7.12.7 nullthrows: 1.1.1 @@ -35353,6 +37396,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-refresh/0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: true + /react-refresh/0.4.3: resolution: {integrity: sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==} engines: {node: '>=0.10.0'} @@ -35527,20 +37575,6 @@ packages: - '@types/react' dev: true - /react-transition-group/4.4.2_prpqlkd37azqwypxturxi7uyci: - resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - dependencies: - '@babel/runtime': 7.19.0 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 17.0.2 - react-dom: 16.14.0_react@17.0.2 - dev: false - /react-transition-group/4.4.2_sfoxds7t5ydpegc3knd667wn6m: resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} peerDependencies: @@ -35565,24 +37599,6 @@ packages: react-dom: 17.0.2_react@17.0.2 dev: false - /react-with-direction/1.4.0_prpqlkd37azqwypxturxi7uyci: - resolution: {integrity: sha512-ybHNPiAmaJpoWwugwqry9Hd1Irl2hnNXlo/2SXQBwbLn/jGMauMS2y9jw+ydyX5V9ICryCqObNSthNt5R94xpg==} - peerDependencies: - react: ^0.14 || ^15 || ^16 - react-dom: ^0.14 || ^15 || ^16 - dependencies: - airbnb-prop-types: 2.16.0_react@17.0.2 - brcast: 2.0.2 - deepmerge: 1.5.2 - direction: 1.0.4 - hoist-non-react-statics: 3.3.2 - object.assign: 4.1.4 - object.values: 1.1.5 - prop-types: 15.8.1 - react: 17.0.2 - react-dom: 16.14.0_react@17.0.2 - dev: false - /react-with-direction/1.4.0_sfoxds7t5ydpegc3knd667wn6m: resolution: {integrity: sha512-ybHNPiAmaJpoWwugwqry9Hd1Irl2hnNXlo/2SXQBwbLn/jGMauMS2y9jw+ydyX5V9ICryCqObNSthNt5R94xpg==} peerDependencies: @@ -35645,7 +37661,7 @@ packages: object.assign: 4.1.4 prop-types: 15.8.1 react: 17.0.2 - react-with-direction: 1.4.0_prpqlkd37azqwypxturxi7uyci + react-with-direction: 1.4.0_sfoxds7t5ydpegc3knd667wn6m dev: false /react-with-styles/4.2.0_tzgwoaxjvs23ve2qhnwxwqxt3e: @@ -36448,7 +38464,6 @@ packages: /retry/0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - dev: false /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -36556,8 +38571,8 @@ packages: dependencies: tslib: 1.14.1 - /rxjs/7.5.5: - resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} + /rxjs/7.8.0: + resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 dev: true @@ -36804,9 +38819,20 @@ packages: resolution: {integrity: sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==} dev: false + /select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: true + /select/1.1.2: resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + /selfsigned/2.1.1: + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} + engines: {node: '>=10'} + dependencies: + node-forge: 1.3.1 + dev: true + /semver-diff/2.1.0: resolution: {integrity: sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=} engines: {node: '>=0.10.0'} @@ -36918,6 +38944,21 @@ packages: safe-buffer: 5.1.1 dev: true + /serve-index/1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /serve-static/1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -36945,6 +38986,10 @@ packages: resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=} dev: true + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: true + /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -37205,6 +39250,14 @@ packages: - supports-color dev: false + /sockjs/0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: true + /socks-proxy-agent/6.2.1: resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} engines: {node: '>= 10'} @@ -37361,6 +39414,32 @@ packages: /spdx-license-ids/3.0.11: resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} + /spdy-transport/3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /spdy/4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /specificity/0.4.1: resolution: {integrity: sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==} hasBin: true @@ -37749,7 +39828,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.2 + loader-utils: 2.0.4 schema-utils: 2.7.1 webpack: 4.46.0 dev: true @@ -37760,7 +39839,7 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: - loader-utils: 2.0.2 + loader-utils: 2.0.4 schema-utils: 3.1.1 webpack: 5.70.0 dev: true @@ -37785,7 +39864,7 @@ packages: resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 7.0.39 postcss-selector-parser: 3.1.2 @@ -37795,7 +39874,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.4 + browserslist: 4.19.3 postcss: 8.4.12 postcss-selector-parser: 6.0.9 dev: true @@ -38659,6 +40738,10 @@ packages: readable-stream: 2.3.7 xtend: 4.0.2 + /thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: true + /timed-out/4.0.1: resolution: {integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=} engines: {node: '>=0.10.0'} @@ -38905,6 +40988,75 @@ packages: yargs-parser: 20.2.9 dev: true + /ts-jest/27.1.3_hszvtzkxfg7axc55y33g3o6iwa: + resolution: {integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^27.0.0 + babel-jest: '>=27.0.0 <28' + esbuild: ~0.14.0 + jest: ^27.0.0 + typescript: '>=3.8 <5.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.21.3 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 27.5.1 + jest-util: 27.5.1 + json5: 2.2.0 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.7 + typescript: 4.8.4 + yargs-parser: 20.2.9 + dev: true + + /ts-jest/27.1.3_n6jwe674nt3ravnkwja2moplpy: + resolution: {integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^27.0.0 + babel-jest: '>=27.0.0 <28' + esbuild: ~0.14.0 + jest: ^27.0.0 + typescript: '>=3.8 <5.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.21.3 + '@types/jest': 27.4.1 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 27.5.1 + jest-util: 27.5.1 + json5: 2.2.0 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.7 + typescript: 4.8.4 + yargs-parser: 20.2.9 + dev: true + /ts-jest/27.1.3_wfmhell6c5i72vvtgtvpmkkb6i: resolution: {integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -39111,65 +41263,65 @@ packages: /turbo-combine-reducers/1.0.2: resolution: {integrity: sha512-gHbdMZlA6Ym6Ur5pSH/UWrNQMIM9IqTH6SoL1DbHpqEdQ8i+cFunSmSlFykPt0eGQwZ4d/XTHOl74H0/kFBVWw==} - /turbo-darwin-64/1.7.0: - resolution: {integrity: sha512-hSGAueSf5Ko8J67mpqjpt9FsP6ePn1nMcl7IVPoJq5dHsgX3anCP/BPlexJ502bNK+87DDyhQhJ/LPSJXKrSYQ==} + /turbo-darwin-64/1.8.3: + resolution: {integrity: sha512-bLM084Wr17VAAY/EvCWj7+OwYHvI9s/NdsvlqGp8iT5HEYVimcornCHespgJS/yvZDfC+mX9EQkn3V2JmYgGGw==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64/1.7.0: - resolution: {integrity: sha512-BLLOW5W6VZxk5+0ZOj5AO1qjM0P5isIgjbEuyAl8lHZ4s9antUbY4CtFrspT32XxPTYoDl4UjviPMcSsbcl3WQ==} + /turbo-darwin-arm64/1.8.3: + resolution: {integrity: sha512-4oZjXtzakopMK110kue3z/hqu3WLv+eDLZOX1NGdo49gqca9BeD8GbH+sXpAp6tqyeuzpss+PIliVYuyt7LgbA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64/1.7.0: - resolution: {integrity: sha512-aw2qxmfZa+kT87SB3GNUoFimqEPzTlzlRqhPgHuAAT6Uf0JHnmebPt4K+ZPtDNl5yfVmtB05bhHPqw+5QV97Yg==} + /turbo-linux-64/1.8.3: + resolution: {integrity: sha512-uvX2VKotf5PU14FCxJA5iHItPQno2JWzerMd+g3/h/Asay6dvxvtVjc39MQeGT0H5njSvzVKFkT+3/5q8lgOEg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64/1.7.0: - resolution: {integrity: sha512-AJEx2jX+zO5fQtJpO3r6uhTabj4oSA5ZhB7zTs/rwu/XqoydsvStA4X8NDW4poTbOjF7DcSHizqwi04tSMzpJw==} + /turbo-linux-arm64/1.8.3: + resolution: {integrity: sha512-E1p+oH3XKMaPS4rqWhYsL4j2Pzc0d/9P5KU7Kn1kqVLo2T3iRA7n2KVULEieUNE0nTH+aIJPXYXOpqCI5wFJaA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64/1.7.0: - resolution: {integrity: sha512-ewj7PPv2uxqv0r31hgnBa3E5qwUu7eyVRP5M1gB/TJXfSHduU79gbxpKCyxIZv2fL/N2/3U7EPOQPSZxBAoljA==} + /turbo-windows-64/1.8.3: + resolution: {integrity: sha512-cnzAytHtoLXd0J7aNzRpZFpL/GTjcBmkvAPlbOdf/Pl1iwS4qzGrudZQ+OM1lmLgLIfBPIavsGHBknTwTNib4A==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64/1.7.0: - resolution: {integrity: sha512-LzjOUzveWkvTD0jP8DBMYiAnYemmydsvqxdSmsUapHHJkl6wKZIOQNSO7pxsy+9XM/1/+0f9Y9F9ZNl5lePTEA==} + /turbo-windows-arm64/1.8.3: + resolution: {integrity: sha512-ulIiItNm2w/zYJdD5/oAzjzNns1IjbpweRzpsE8tLXaWwo6+fnXXkyloUug0IUhcd2k6fJXfoiDZfygqpOVuXg==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo/1.7.0: - resolution: {integrity: sha512-cwympNwQNnQZ/TffBd8yT0i0O10Cf/hlxccCYgUcwhcGEb9rDjE5thDbHoHw1hlJQUF/5ua7ERJe7Zr0lNE/ww==} + /turbo/1.8.3: + resolution: {integrity: sha512-zGrkU1EuNFmkq6iky6LcMqD4h0OLE8XysVFxQWRIZbcTNnf0XAycbsbeEyiJpiWeqb7qtg2bVuY9EYcNoNhVuQ==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.7.0 - turbo-darwin-arm64: 1.7.0 - turbo-linux-64: 1.7.0 - turbo-linux-arm64: 1.7.0 - turbo-windows-64: 1.7.0 - turbo-windows-arm64: 1.7.0 + turbo-darwin-64: 1.8.3 + turbo-darwin-arm64: 1.8.3 + turbo-linux-64: 1.8.3 + turbo-linux-arm64: 1.8.3 + turbo-windows-64: 1.8.3 + turbo-windows-arm64: 1.8.3 dev: true /tweetnacl/0.14.5: @@ -39672,7 +41824,7 @@ packages: optional: true dependencies: file-loader: 6.2.0_webpack@4.46.0 - loader-utils: 2.0.2 + loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 webpack: 4.46.0 @@ -39688,7 +41840,7 @@ packages: file-loader: optional: true dependencies: - loader-utils: 2.0.2 + loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.1 webpack: 5.70.0_bgqcrdgdviybk52kjcpjat65sa @@ -40176,6 +42328,12 @@ packages: glob-to-regexp: 0.4.1 graceful-fs: 4.2.9 + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: true + /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -40283,7 +42441,7 @@ packages: webpack: 5.70.0_webpack-cli@3.3.12 yargs: 13.3.2 - /webpack-cli/4.9.2_wbg6qaiqcwsayvtung7xs6mhka: + /webpack-cli/4.9.2_ciq5cijsysjq5sik752b4nyq2m: resolution: {integrity: sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -40306,7 +42464,7 @@ packages: '@discoveryjs/json-ext': 0.5.7 '@webpack-cli/configtest': 1.1.1_spmstbzrmxjdafr7ccogoqrx6e '@webpack-cli/info': 1.4.1_webpack-cli@4.9.2 - '@webpack-cli/serve': 1.6.1_webpack-cli@4.9.2 + '@webpack-cli/serve': 1.6.1_ht4xi23ezbiqlmpjtiwigrodwi colorette: 2.0.16 commander: 7.2.0 execa: 5.1.1 @@ -40316,6 +42474,7 @@ packages: rechoir: 0.7.1 webpack: 5.70.0_webpack-cli@4.9.2 webpack-bundle-analyzer: 3.9.0 + webpack-dev-server: 4.12.0_jaxrlecucqtr54lmhmx67obzmy webpack-merge: 5.8.0 dev: true @@ -40376,13 +42535,77 @@ packages: dependencies: colorette: 1.4.0 mem: 8.1.1 - memfs: 3.3.0 + memfs: 3.4.13 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 3.1.1 webpack: 5.70.0 dev: true + /webpack-dev-middleware/5.3.3_webpack@5.70.0: + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.16 + memfs: 3.4.13 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.0.0 + webpack: 5.70.0_webpack-cli@4.9.2 + dev: true + + /webpack-dev-server/4.12.0_jaxrlecucqtr54lmhmx67obzmy: + resolution: {integrity: sha512-XRN9YRnvOj3TQQ5w/0pR1y1xDcVnbWtNkTri46kuEbaWUPTHsWUvOyAAI7PZHLY+hsFki2kRltJjKMw7e+IiqA==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.10 + '@types/connect-history-api-fallback': 1.3.5 + '@types/express': 4.17.14 + '@types/serve-index': 1.9.1 + '@types/serve-static': 1.15.0 + '@types/sockjs': 0.3.33 + '@types/ws': 8.5.4 + ansi-html-community: 0.0.8 + bonjour-service: 1.1.0 + chokidar: 3.5.3 + colorette: 2.0.16 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.1 + graceful-fs: 4.2.9 + html-entities: 2.3.2 + http-proxy-middleware: 2.0.6_fs2s5z67bp6aaux2wfl66yxz5e + ipaddr.js: 2.0.1 + launch-editor: 2.6.0 + open: 8.4.0 + p-retry: 4.6.1 + rimraf: 3.0.2 + schema-utils: 4.0.0 + selfsigned: 2.1.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.70.0_webpack-cli@4.9.2 + webpack-cli: 4.9.2_ciq5cijsysjq5sik752b4nyq2m + webpack-dev-middleware: 5.3.3_webpack@5.70.0 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: true + /webpack-filter-warnings-plugin/1.2.1_webpack@4.46.0: resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} @@ -40728,7 +42951,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.2.5_acorn@8.8.1+webpack@5.70.0 watchpack: 2.3.1 - webpack-cli: 4.9.2_wbg6qaiqcwsayvtung7xs6mhka + webpack-cli: 4.9.2_ciq5cijsysjq5sik752b4nyq2m webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -41106,6 +43329,20 @@ packages: optional: true utf-8-validate: optional: true + dev: false + + /ws/8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true /x-is-string/0.1.0: resolution: {integrity: sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=} @@ -41168,7 +43405,6 @@ packages: /yallist/3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -41443,9 +43679,9 @@ packages: version: 0.0.1 requiresBuild: true dependencies: - '@babel/cli': 7.17.6_@babel+core@7.17.8 - '@babel/core': 7.17.8 - '@babel/preset-env': 7.19.3_@babel+core@7.17.8 + '@babel/cli': 7.17.6_@babel+core@7.21.3 + '@babel/core': 7.21.3 + '@babel/preset-env': 7.19.3_@babel+core@7.21.3 '@slack/web-api': 5.15.0 '@wordpress/e2e-test-utils': 3.0.0_ddjhsfu4aotkh3cuzmpsln6ywq config: 3.3.7 diff --git a/tools/code-analyzer/README.md b/tools/code-analyzer/README.md index cb07a057b0a..6d81997288e 100644 --- a/tools/code-analyzer/README.md +++ b/tools/code-analyzer/README.md @@ -6,7 +6,7 @@ ## Commands -Currently there are just 2 commands: +Currently there are 3 commands: 1. `lint`. Analyzer is used as a linter for PRs to check if hook/template/db changes were introduced. It produces output either directly on CI or via setting output variables in GH actions. @@ -29,3 +29,11 @@ writing the main file in this particular branch reports `6.8.1` so the output of This command is particularly useful combined with the analyzer, allowing you to determine the last major/minor.0 version of a branch or ref before passing that as the version argument to `analyzer`. + +3. `scan`. Scan is like `lint` but lets you scan for a specific change type. e.g. you can scan just for hook changes if you wish. + +Here is an example of the `scan` command run to look for hook changes: + +`pnpm analyzer scan hooks "release/6.8" "release/6.7" --since "6.8.0"` +\ +In this command we compare the `release/6.7` and `release/6.8` branches to find hook changes, and we're looking for changes introduced since `6.8.0` (using the `@since` tag). diff --git a/tools/code-analyzer/src/commands/analyzer/analyzer-scan.ts b/tools/code-analyzer/src/commands/analyzer/analyzer-scan.ts new file mode 100644 index 00000000000..2bca09a3844 --- /dev/null +++ b/tools/code-analyzer/src/commands/analyzer/analyzer-scan.ts @@ -0,0 +1,155 @@ +/** + * External dependencies + */ +import { Command } from '@commander-js/extra-typings'; +import { Logger } from 'cli-core/src/logger'; +import { join } from 'path'; + +/** + * Internal dependencies + */ +import { + scanChangesForDB, + scanChangesForHooks, + scanChangesForSchema, + scanChangesForTemplates, + ScanType, +} from '../../lib/scan-changes'; +import { + printDatabaseUpdates, + printHookResults, + printSchemaChange, + printTemplateResults, +} from '../../print'; + +const printEmptyNotice = ( scanType: ScanType ) => { + Logger.notice( `\n\n## ${ scanType.toUpperCase() } CHANGES` ); + Logger.notice( '---------------------------------------------------' ); + Logger.notice( `No ${ scanType } changes found.` ); + Logger.notice( '---------------------------------------------------' ); +}; + +const program = new Command() + .command( 'scan' ) + .argument( + '', + 'Type of change to scan for. Options: templates, hooks, database, schema.' + ) + .argument( + '', + 'GitHub branch/tag/commit hash to compare against the base branch/tag/commit hash.' + ) + .argument( + '[base]', + 'Base branch to compare against. Defaults to trunk.', + 'trunk' + ) + .option( + '-s, --since ', + 'Specify the version used to determine which changes are included (version listed in @since code doc). Only needed for hook, template, schema changes.' + ) + .option( + '-src, --source ', + 'Git repo url or local path to a git repo.', + join( process.cwd(), '../../' ) + ) + .option( + '-o, --outputStyle ', + 'Output style for the results. Options: github, cli. Github output will set the results as an output variable for Github actions.', + 'cli' + ) + .action( async ( scanType, compare, base, options ) => { + const { since: sinceVersion, source, outputStyle } = options; + + if ( + ( scanType === 'hooks' || + scanType === 'templates' || + scanType === 'schema' ) && + ! sinceVersion + ) { + throw new Error( + `To scan for ${ scanType } changes you must provide the since argument.` + ); + } + + switch ( scanType ) { + case 'hooks': + // We know sinceVersion will exist but TS can't infer that here. + if ( sinceVersion ) { + const hookChanges = await scanChangesForHooks( + compare, + sinceVersion, + base, + source + ); + + if ( hookChanges.length ) { + printHookResults( + hookChanges, + outputStyle, + 'HOOKS', + Logger.notice + ); + } else { + printEmptyNotice( 'hooks' ); + } + } + break; + case 'templates': + // We know sinceVersion will exist but TS can't infer that here. + if ( sinceVersion ) { + const templateChanges = await scanChangesForTemplates( + compare, + sinceVersion, + base, + source + ); + if ( templateChanges && templateChanges.length ) { + printTemplateResults( + templateChanges, + outputStyle, + 'TEMPLATES', + Logger.notice + ); + } else { + printEmptyNotice( 'templates' ); + } + } + break; + case 'database': + const dbChanges = await scanChangesForDB( + compare, + base, + source + ); + if ( dbChanges ) { + printDatabaseUpdates( dbChanges, 'cli', Logger.notice ); + } else { + printEmptyNotice( 'database' ); + } + break; + case 'schema': + const schemaChanges = await scanChangesForSchema( + compare, + base, + source + ); + if ( schemaChanges && schemaChanges.length && sinceVersion ) { + printSchemaChange( + schemaChanges, + sinceVersion, + 'cli', + Logger.notice + ); + } else { + printEmptyNotice( 'schema' ); + } + break; + default: + throw new Error( + 'Invalid scan type. Options: templates, hooks, database, schema.' + ); + } + } ); + +program.parse( process.argv ); diff --git a/tools/code-analyzer/src/commands/analyzer/index.ts b/tools/code-analyzer/src/commands/analyzer/index.ts index ed81360a9ea..87ff2a6ce95 100644 --- a/tools/code-analyzer/src/commands/analyzer/index.ts +++ b/tools/code-analyzer/src/commands/analyzer/index.ts @@ -10,6 +10,7 @@ program .name( 'analyzer' ) .version( '0.0.1' ) .command( 'lint', 'Lint changes', { isDefault: true } ) - .command( 'major-minor', 'Determine major/minor version of a plugin' ); + .command( 'major-minor', 'Determine major/minor version of a plugin' ) + .command( 'scan', 'Detect changes between plugin versions' ); program.parse( process.argv ); diff --git a/tools/code-analyzer/src/lib/scan-changes.ts b/tools/code-analyzer/src/lib/scan-changes.ts index a21804c002d..e03ea723903 100644 --- a/tools/code-analyzer/src/lib/scan-changes.ts +++ b/tools/code-analyzer/src/lib/scan-changes.ts @@ -15,6 +15,121 @@ import { scanForDBChanges } from './db-changes'; import { scanForHookChanges } from './hook-changes'; import { scanForTemplateChanges } from './template-changes'; import { SchemaDiff, generateSchemaDiff } from '../git'; +import { scanForSchemaChanges } from './schema-changes'; + +export type ScanType = 'schema' | 'db' | 'hooks' | 'templates' | string; + +const generateVersionDiff = async ( + compareVersion: string, + base: string, + source: string, + clonedPath?: string +) => { + Logger.startTask( `Making temporary clone of ${ source }...` ); + + const tmpRepoPath = + typeof clonedPath !== 'undefined' + ? clonedPath + : await cloneRepo( source ); + + Logger.endTask(); + + Logger.notice( + `Temporary clone of ${ source } created at ${ tmpRepoPath }` + ); + + Logger.notice( + `Temporary clone of ${ source } created at ${ tmpRepoPath }` + ); + + const diff = await generateDiff( + tmpRepoPath, + base, + compareVersion, + Logger.error, + [ 'tools' ] + ); + + return { diff, tmpRepoPath }; +}; + +export const scanChangesForDB = async ( + compareVersion: string, + base: string, + source: string, + clonedPath?: string +) => { + const { diff } = await generateVersionDiff( + compareVersion, + base, + source, + clonedPath + ); + + return scanForDBChanges( diff ); +}; + +export const scanChangesForHooks = async ( + compareVersion: string, + sinceVersion: string, + base: string, + source: string, + clonedPath?: string +) => { + const { diff, tmpRepoPath } = await generateVersionDiff( + compareVersion, + base, + source, + clonedPath + ); + + const hookChanges = await scanForHookChanges( + diff, + sinceVersion, + tmpRepoPath + ); + + return Array.from( hookChanges.values() ); +}; + +export const scanChangesForTemplates = async ( + compareVersion: string, + sinceVersion: string, + base: string, + source: string, + clonedPath?: string +) => { + const { diff, tmpRepoPath } = await generateVersionDiff( + compareVersion, + base, + source, + clonedPath + ); + + const templateChanges = await scanForTemplateChanges( + diff, + sinceVersion, + tmpRepoPath + ); + + return Array.from( templateChanges.values() ); +}; + +export const scanChangesForSchema = async ( + compareVersion: string, + base: string, + source: string, + clonedPath?: string +) => { + const { tmpRepoPath } = await generateVersionDiff( + compareVersion, + base, + source, + clonedPath + ); + + return scanForSchemaChanges( compareVersion, base, tmpRepoPath ); +}; export const scanForChanges = async ( compareVersion: string, diff --git a/tools/code-analyzer/src/lib/schema-changes.ts b/tools/code-analyzer/src/lib/schema-changes.ts new file mode 100644 index 00000000000..43f56458d44 --- /dev/null +++ b/tools/code-analyzer/src/lib/schema-changes.ts @@ -0,0 +1,60 @@ +/** + * External dependencies + */ +import { Logger } from 'cli-core/src/logger'; +import { readFile } from 'fs/promises'; +import { join } from 'path'; + +/** + * Internal dependencies + */ +import { generateSchemaDiff } from '../git'; +import { execAsync } from '../utils'; + +export const scanForSchemaChanges = async ( + compareVersion: string, + base: string, + tmpRepoPath: string +) => { + const pluginPath = join( tmpRepoPath, 'plugins/woocommerce' ); + + const build = async () => { + const fileStr = await readFile( + join( pluginPath, 'package.json' ), + 'utf-8' + ); + const packageJSON = JSON.parse( fileStr ); + + // Temporarily save the current PNPM version. + await execAsync( `tmpgPNPM="$(pnpm --version)"` ); + + if ( packageJSON.engines && packageJSON.engines.pnpm ) { + await execAsync( `npm i -g pnpm@${ packageJSON.engines.pnpm }`, { + cwd: pluginPath, + } ); + } + + // Note doing the minimal work to get a DB scan to work, avoiding full build for speed. + await execAsync( 'composer install', { cwd: pluginPath } ); + await execAsync( 'pnpm run --filter=woocommerce build:feature-config', { + cwd: pluginPath, + } ); + }; + + Logger.startTask( 'Generating schema diff...' ); + + const schemaDiff = await generateSchemaDiff( + tmpRepoPath, + compareVersion, + base, + build, + Logger.error + ); + + // Restore the previously saved PNPM version + await execAsync( `npm i -g pnpm@"$tmpgPNPM"` ); + + Logger.endTask(); + + return schemaDiff; +}; diff --git a/tools/release-posts/commands/release-post/index.ts b/tools/release-posts/commands/release-post/index.ts index 33f28b612ef..7c7b3ab3ef2 100644 --- a/tools/release-posts/commands/release-post/index.ts +++ b/tools/release-posts/commands/release-post/index.ts @@ -10,6 +10,7 @@ program .name( 'release-post' ) .version( '0.0.1' ) .command( 'release', 'Generate release post', { isDefault: true } ) + .command( 'beta', 'Generate draft beta release post' ) .command( 'contributors', 'Generate a list of contributors for a release post' diff --git a/tools/release-posts/commands/release-post/release-post-beta.ts b/tools/release-posts/commands/release-post/release-post-beta.ts new file mode 100755 index 00000000000..b5bb915537b --- /dev/null +++ b/tools/release-posts/commands/release-post/release-post-beta.ts @@ -0,0 +1,225 @@ +/** + * External dependencies + */ +import semver from 'semver'; +import { writeFile } from 'fs/promises'; +import { tmpdir } from 'os'; +import { join } from 'path'; +import { Logger } from 'cli-core/src/logger'; +import { Command } from '@commander-js/extra-typings'; +import dotenv from 'dotenv'; +// @ts-expect-error - The enquirer types are incorrect. +// eslint-disable-next-line @woocommerce/dependency-group +import { Select } from 'enquirer'; + +/** + * Internal dependencies + */ +import { renderTemplate } from '../../lib/render-template'; +import { getWordpressComAuthToken } from '../../lib/oauth-helper'; +import { getEnvVar } from '../../lib/environment'; +import { getMostRecentFinal } from '../../lib/github-api'; +import { + getFirstTuesdayOfTheMonth, + getSecondTuesdayOfTheMonth, +} from '../../lib/dates'; +import { + createWpComDraftPost, + searchForPostsByCategory, +} from '../../lib/draft-post'; + +const DEVELOPER_WOOCOMMERCE_SITE_ID = '96396764'; + +dotenv.config(); + +// Define the release post command +const program = new Command() + .command( 'beta' ) + .description( 'CLI to automate generation of a draft beta release post.' ) + .argument( + '', + 'The version for this post in x.y.z-beta.n format. Ex: 7.1.0-beta.1' + ) + .option( + '--releaseDate ', + 'The date for the final release as mm-dd-yyyy, year inferred as current year, defaults to second tuesday of next month.', + getSecondTuesdayOfTheMonth( + new Date().getMonth() + 1 + ).toLocaleDateString( 'en-US', { + month: '2-digit', + day: '2-digit', + year: 'numeric', + } ) + ) + .option( '--outputOnly', 'Only output the post, do not publish it' ) + .option( + '--tags ', + 'Comma separated list of tags to add to the post.', + 'Releases,WooCommerce Core' + ) + .option( + '--siteId ', + 'For posting to a non-default site (for testing)' + ) + .action( async ( releaseVersion, options ) => { + const { + outputOnly, + siteId = DEVELOPER_WOOCOMMERCE_SITE_ID, + tags, + releaseDate, + } = options; + + const postTags = ( tags && + tags.split( ',' ).map( ( tag ) => tag.trim() ) ) || [ + 'WooCommerce Core', + 'Releases', + ]; + + const finalReleaseDate = new Date( releaseDate ); + const isOutputOnly = !! outputOnly; + const semverVersion = semver.parse( releaseVersion ); + + // This is supposed to be a beta post so throw if the version provided is not a beta version. + // Things we don't accept: + // * missing beta.x + // * any other kind of prerelease, e.g. rc + // * .x must be a number, so not: beta.1b or beta.1.1 but beta.1 is ok. + if ( + ! semverVersion || + ! semverVersion.prerelease.length || + typeof semverVersion.prerelease[ 1 ] === 'string' + ) { + throw new Error( + `Invalid current version: ${ releaseVersion }. Provide current version in x.y.z-beta.n format.` + ); + } else { + const [ , prereleaseVersion ] = semverVersion.prerelease; + + // Now infer the previous version, if the one you provide is beta.1 we'll need to find the last major release from + // Github releases. If what you provided is beta.2 we'll assume previous was beta.1 + const previousVersion = + prereleaseVersion === 1 + ? ( await getMostRecentFinal() ).tag_name + : `${ semverVersion.major }.${ semverVersion.minor }.${ + semverVersion.patch + }-beta.${ prereleaseVersion - 1 }`; + + const semverPreviousVersion = semver.parse( previousVersion ); + + if ( ! semverPreviousVersion ) { + throw new Error( + `Could not parse previous version from: ${ previousVersion }` + ); + } + + const clientId = getEnvVar( 'WPCOM_OAUTH_CLIENT_ID', true ); + const clientSecret = getEnvVar( 'WPCOM_OAUTH_CLIENT_SECRET', true ); + const redirectUri = + getEnvVar( 'WPCOM_OAUTH_REDIRECT_URI' ) || + 'http://localhost:3000/oauth'; + + Logger.startTask( + 'Getting auth token for WordPress.com (needed to find last beta post).' + ); + const authToken = await getWordpressComAuthToken( + clientId, + clientSecret, + siteId, + redirectUri, + 'posts' + ); + Logger.endTask(); + + const versionSearch = + prereleaseVersion === 1 + ? `WooCommerce ${ semverPreviousVersion.major }.${ semverPreviousVersion.minor }.${ semverPreviousVersion.patch }` + : `WooCommerce ${ semverPreviousVersion.major }.${ semverPreviousVersion.minor } Beta ${ semverPreviousVersion.prerelease[ 1 ] }`; + + Logger.startTask( + `Finding recent release posts with title: ${ versionSearch }` + ); + + const posts = + ( await searchForPostsByCategory( + siteId, + versionSearch, + 'WooCommerce Core', + authToken + ) ) || []; + + Logger.endTask(); + + const prompt = new Select( { + name: 'Previous post', + message: 'Choose the previous post to link to:', + choices: posts.length + ? posts.map( ( p ) => p.title ) + : [ 'No posts found - generate default link' ], + } ); + + const lastReleasePostTitle: string = await prompt.run(); + const lastReleasePost = posts.find( + ( p ) => p.title === lastReleasePostTitle + ); + + if ( ! lastReleasePost ) { + Logger.warn( + 'Could not find previous release post, make sure to update the link in the post before publishing.' + ); + } + + if ( ! authToken && ! isOutputOnly ) { + throw new Error( + 'Error getting auth token, check your env settings are correct.' + ); + } else { + const html = await renderTemplate( 'beta-release.ejs', { + releaseDate, + betaNumber: prereleaseVersion, + version: semverVersion, + previousVersion: semverPreviousVersion, + prettyVersion: `${ semverVersion.major }.${ semverVersion.minor }.${ semverVersion.patch } Beta ${ prereleaseVersion }`, + prettyPreviousVersion: `${ semverPreviousVersion.major }.${ + semverPreviousVersion.minor + }.${ semverPreviousVersion.patch }${ + semverPreviousVersion.prerelease.length + ? ' ' + + semverPreviousVersion.prerelease[ 0 ] + + ' ' + + semverPreviousVersion.prerelease[ 1 ] + : '' + }`, + rcReleaseDate: getFirstTuesdayOfTheMonth( + finalReleaseDate.getMonth() + ), + finalReleaseDate, + lastReleasePostUrl: + lastReleasePost?.URL || + 'https://developer.woocommerce.com/category/woocommerce-core-release-notes/', + } ); + + if ( isOutputOnly ) { + const tmpFile = join( + tmpdir(), + `beta-release-${ releaseVersion }.html` + ); + + await writeFile( tmpFile, html ); + + Logger.notice( `Output written to ${ tmpFile }` ); + } else { + Logger.startTask( 'Publishing draft release post' ); + await createWpComDraftPost( + siteId, + `WooCommerce ${ semverVersion.major }.${ semverVersion.minor } Beta ${ prereleaseVersion } Released`, + html, + postTags, + authToken + ); + Logger.endTask(); + } + } + } + } ); + +program.parse( process.argv ); diff --git a/tools/release-posts/commands/release-post/release-post-release.ts b/tools/release-posts/commands/release-post/release-post-release.ts index d03b637d5b5..bffd5b95405 100644 --- a/tools/release-posts/commands/release-post/release-post-release.ts +++ b/tools/release-posts/commands/release-post/release-post-release.ts @@ -150,7 +150,7 @@ const program = new Command() let postContent; - if ( 'undefined' !== typeof options.editPostId ) { + if ( typeof options.editPostId !== 'undefined' ) { try { const prevPost = await fetchWpComPost( siteId, @@ -197,7 +197,7 @@ const program = new Command() }; const html = - 'undefined' !== typeof options.editPostId + typeof options.editPostId !== 'undefined' ? editPostHTML( postContent, { hooks: await renderTemplate( 'hooks.ejs', @@ -234,7 +234,7 @@ const program = new Command() try { const { URL } = - 'undefined' !== typeof options.editPostId + typeof options.editPostId !== 'undefined' ? await editWpComPostContent( siteId, options.editPostId, diff --git a/tools/release-posts/lib/dates.ts b/tools/release-posts/lib/dates.ts new file mode 100644 index 00000000000..80d55766e09 --- /dev/null +++ b/tools/release-posts/lib/dates.ts @@ -0,0 +1,22 @@ +export const getFirstTuesdayOfTheMonth = ( month: number ): Date => { + // create a new Date object for the first day of the month + const firstDayOfMonth = new Date( new Date().getFullYear(), month, 1 ); + + // create a new Date object for the first Tuesday of the month + const firstTuesday = new Date( firstDayOfMonth ); + + firstTuesday.setDate( 1 + ( ( 2 - firstDayOfMonth.getDay() + 7 ) % 7 ) ); + + return firstTuesday; +}; + +export const getSecondTuesdayOfTheMonth = ( month: number ): Date => { + // create a new Date object for the first Tuesday of the month + const firstTuesday = getFirstTuesdayOfTheMonth( month ); + + // create a new Date object for the second Tuesday of the current month + const secondTuesday = new Date( firstTuesday ); + secondTuesday.setDate( secondTuesday.getDate() + 7 ); + + return secondTuesday; +}; diff --git a/tools/release-posts/lib/draft-post.ts b/tools/release-posts/lib/draft-post.ts index ee298841264..cc481a15e8a 100644 --- a/tools/release-posts/lib/draft-post.ts +++ b/tools/release-posts/lib/draft-post.ts @@ -4,6 +4,14 @@ import fetch from 'node-fetch'; import { Logger } from 'cli-core/src/logger'; +// Typing just the things we need from the WP.com Post object. +// (which is not the same as WP Post object or API Post object). +// See example response here: https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/posts/ to add more props. +type WordpressComPost = { + title: string; + URL: string; +}; + /** * Fetch a post from WordPress.com * @@ -41,6 +49,39 @@ export const fetchWpComPost = async ( } }; +export const searchForPostsByCategory = async ( + siteId: string, + search: string, + category: string, + authToken: string +) => { + try { + const post = await fetch( + `https://public-api.wordpress.com/rest/v1.1/sites/${ siteId }/posts?${ new URLSearchParams( + { search, category } + ) }`, + { + headers: { + Authorization: `Bearer ${ authToken }`, + 'Content-Type': 'application/json', + }, + method: 'GET', + } + ); + + if ( post.status !== 200 ) { + const text = await post.text(); + throw new Error( `Error creating draft post: ${ text }` ); + } + + return ( await post.json() ).posts as WordpressComPost[]; + } catch ( e: unknown ) { + if ( e instanceof Error ) { + Logger.error( e.message ); + } + } +}; + /** * Edit a post on wordpress.com * diff --git a/tools/release-posts/lib/github-api.ts b/tools/release-posts/lib/github-api.ts index ebd3504f2f7..bbd33a2525a 100644 --- a/tools/release-posts/lib/github-api.ts +++ b/tools/release-posts/lib/github-api.ts @@ -102,3 +102,16 @@ export const getContributorData = async ( headRef, } as ContributorData; }; + +export const getMostRecentFinal = async () => { + const octokit = new Octokit( { + auth: getEnvVar( 'GITHUB_ACCESS_TOKEN', true ), + } ); + + const release = await octokit.repos.getLatestRelease( { + owner: 'woocommerce', + repo: 'woocommerce', + } ); + + return release.data; +}; diff --git a/tools/release-posts/package.json b/tools/release-posts/package.json index 5aa9f43503a..11ae04cff16 100644 --- a/tools/release-posts/package.json +++ b/tools/release-posts/package.json @@ -31,6 +31,7 @@ "commander": "9.4.0", "dotenv": "^10.0.0", "ejs": "^3.1.8", + "enquirer": "^2.3.6", "express": "^4.18.1", "form-data": "^4.0.0", "lodash.shuffle": "^4.2.0", diff --git a/tools/release-posts/templates/beta-release.ejs b/tools/release-posts/templates/beta-release.ejs new file mode 100644 index 00000000000..0494302e451 --- /dev/null +++ b/tools/release-posts/templates/beta-release.ejs @@ -0,0 +1,164 @@ + +

+ Beta <%= betaNumber %> for the <%= + finalReleaseDate.toLocaleDateString('en-US', {month: 'long', day: + 'numeric'}) %> release of WooCommerce is now available for testing! You can + either + download it directly from WordPress.org + or install our + WooCommerce Beta Tester Plugin. +

+ + + +

Highlights

+ + + +

+ Since the release of + <%= prettyPreviousVersion %>, the + following changes have been made: +

+ + + +
    + +
  • List your changes here.
  • + +
+ + + +

+ For the complete list, view the changelog in the readme for this release. +

+ + + +

Actions and Filters

+ + + +

No changes introduced.

+ + + +

Database Changes

+ + + +

No changes introduced.

+ + + +

Template Changes

+ + + +

No changes introduced.

+ + + +

Release Schedule

+ + + +

+ We're still on track for our planned <%= + finalReleaseDate.toLocaleDateString('en-US', {month: 'long', day: + 'numeric'}) %> release. +

+ + + +
+ + + + + + + + + + + + + + + +
VersionRelease
Release Candidate + <%= rcReleaseDate.toLocaleDateString('en-US', { month: + 'long', day: 'numeric', year: 'numeric' }) %> +
Final Release + <%= finalReleaseDate.toLocaleDateString('en-US', { month: + 'long', day: 'numeric', year: 'numeric' }) %> +
+
+ + + +

Testing

+ + + +

+ If you'd like to dive in and help test this new release, our handy WooCommerce Beta Tester plugin allows you to switch between beta versions and release candidates. + You can also download the release from WordPress.org. +

+ + + +

+ A set of testing instructions has been published on our Wiki page in GitHub. We've also posted a helpful writeup on beta testing to help get you started. +

+ + + +

+ If you discover any bugs during the testing process, please let us know + by logging a report in GitHub. +

+ + + +

+ diff --git a/tools/release-posts/tsconfig.json b/tools/release-posts/tsconfig.json index b49d71cfb0a..0b425cd5c54 100644 --- a/tools/release-posts/tsconfig.json +++ b/tools/release-posts/tsconfig.json @@ -1,7 +1,10 @@ { - "extends": "@tsconfig/node16/tsconfig.json", - "ts-node": { - "transpileOnly": true, - "files": true, - } + "extends": "@tsconfig/node16/tsconfig.json", + "compilerOptions": { + "module": "Node16" + }, + "ts-node": { + "transpileOnly": true, + "files": true + } }