Add Branding + Tone to Product Descriptions (#39253)

* [Woo AI] generate product descriptions using tone of voice and/or business description context.
This commit is contained in:
Thomas Shellberg 2023-08-09 14:15:18 +02:00 committed by GitHub
parent d08780f139
commit 9418072a47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 321 additions and 97 deletions

View File

@ -0,0 +1,4 @@
Significance: minor
Type: add
[Woo AI] Add Store Branding data to product description generation prompt.

View File

@ -29,6 +29,16 @@ class Woo_AI_Settings {
*/
protected $id = 'woo-ai-settings-tab';
/**
* Tone of voice select options.
*
* @var array
*/
private $tone_of_voice_select_options;
private const STORE_DESCRIPTION_OPTION_KEY = 'woo_ai_describe_store_description';
private const TONE_OF_VOICE_OPTION_KEY = 'woo_ai_tone_of_voice_select';
/**
* Main Instance.
*/
@ -44,10 +54,64 @@ class Woo_AI_Settings {
add_action( 'admin_enqueue_scripts', array( $this, 'add_woo_ai_settings_script' ) );
add_action( 'woocommerce_settings_save_advanced', array( $this, 'action_save_woo_ai_settings_tab' ) );
add_action( 'woocommerce_settings_page_init', array( $this, 'add_ui' ) );
add_filter( 'woocommerce_settings_groups', array( $this, 'add_woo_ai_settings_group' ) );
add_filter( 'woocommerce_settings-woo-ai', array( $this, 'add_woo_ai_settings_group_settings' ) );
$this->tone_of_voice_select_options = array(
'informal' => __( 'Informal', 'woocommerce' ),
'humorous' => __( 'Humorous', 'woocommerce' ),
'neutral' => __( 'Neutral', 'woocommerce' ),
'youthful' => __( 'Youthful', 'woocommerce' ),
'formal' => __( 'Formal', 'woocommerce' ),
'motivational' => __( 'Motivational', 'woocommerce' ),
);
$this->add_sanitization_hooks();
}
/**
* Adds settings which can be retrieved via the WooCommerce Settings API.
*
* @see https://github.com/woocommerce/woocommerce/wiki/Settings-API
*
* @param array $settings The original settings array.
* @return array The modified settings array.
*/
public function add_woo_ai_settings_group_settings( $settings ) {
$settings[] = array(
'id' => 'tone-of-voice',
'option_key' => self::TONE_OF_VOICE_OPTION_KEY,
'label' => __( 'Storewide Tone of Voice', 'woocommerce' ),
'description' => __( 'This controls the conversational tone that will be used when generating content.', 'woocommerce' ),
'default' => 'neutral',
'type' => 'select',
'options' => $this->tone_of_voice_select_options,
);
$settings[] = array(
'id' => 'store-description',
'option_key' => self::STORE_DESCRIPTION_OPTION_KEY,
'label' => __( 'Store Description', 'woocommerce' ),
'description' => __( 'This is a short description of your store which could be used to help generate content.', 'woocommerce' ),
'type' => 'textarea',
);
return $settings;
}
/**
* Register our Woo AI plugin group to the WooCommerce Settings API.
*
* @param array $locations The original settings array.
* @return array The modified settings array.
*/
public function add_woo_ai_settings_group( $locations ) {
$locations[] = array(
'id' => 'woo-ai',
'label' => __( 'Woo AI', 'woocommerce' ),
'description' => __( 'Settings for the Woo AI plugin.', 'woocommerce' ),
);
return $locations;
}
/**
* Add UI related hooks.
*/
@ -147,25 +211,18 @@ class Woo_AI_Settings {
array(
'title' => __( 'Tone of voice', 'woocommerce' ),
'id' => 'woo_ai_tone_of_voice_select',
'id' => self::TONE_OF_VOICE_OPTION_KEY,
'css' => 'min-width:300px;',
'default' => 'neutral',
'type' => 'select',
'desc' => $markup_str,
'desc_tip' => __( 'Choose the language style that best resonates with your customers. It\'ll be used in text-based content, like product descriptions.', 'woocommerce' ),
'custom_attributes' => array( 'disabled' => 'true' ),
'options' => array(
'informal' => esc_html__( 'Informal', 'woocommerce' ),
'humorous' => esc_html__( 'Humorous', 'woocommerce' ),
'neutral' => esc_html__( 'Neutral', 'woocommerce' ),
'youthful' => esc_html__( 'Youthful', 'woocommerce' ),
'formal' => esc_html__( 'Formal', 'woocommerce' ),
'motivational' => esc_html__( 'Motivational', 'woocommerce' ),
),
'options' => $this->tone_of_voice_select_options,
),
array(
'id' => 'woo_ai_describe_store_description',
'id' => self::STORE_DESCRIPTION_OPTION_KEY,
'type' => 'textarea',
'custom_attributes' => array( 'disabled' => 'true' ),
'title' => __( 'Describe your business', 'woocommerce' ),

View File

@ -39,9 +39,11 @@
"@wordpress/element": "wp-6.0",
"@wordpress/hooks": "wp-6.0",
"@wordpress/i18n": "wp-6.0",
"@wordpress/notices": "wp-6.0",
"@wordpress/plugins": "wp-6.0",
"debug": "^4.3.3",
"prop-types": "^15.8.1"
"prop-types": "^15.8.1",
"react-query": "^3.39.3"
},
"peerDependencies": {
"@types/react": "^17.0.2",

2
plugins/woo-ai/src/custom.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
declare module '@wordpress/notices';
declare module '@wordpress/data';

View File

@ -1,3 +1,4 @@
export * from './useTinyEditor';
export * from './useFeedbackSnackbar';
export * from './useProductSlug';
export * from './useStoreBranding';

View File

@ -0,0 +1,58 @@
/**
* External dependencies
*/
import { useEffect } from 'react';
import { useQuery, UseQueryResult } from 'react-query';
/**
* Internal dependencies
*/
import { getToneOfVoice, getBusinessDescription } from '../utils/branding';
// Define your data type
interface BrandingData {
toneOfVoice: string;
businessDescription: string;
}
// Define your error type
interface BrandingError {
message: string;
}
type UseStoreBrandingOptions = {
onError?: ( error: BrandingError ) => void;
};
// Async function to fetch branding data
async function fetchBrandingData(): Promise< BrandingData > {
const [ toneOfVoice, businessDescription ] = await Promise.all( [
getToneOfVoice(),
getBusinessDescription(),
] );
return { toneOfVoice, businessDescription };
}
export function useStoreBranding( {
onError,
}: UseStoreBrandingOptions = {} ): UseQueryResult<
BrandingData,
BrandingError
> {
const result = useQuery< BrandingData, BrandingError >(
'storeBranding',
fetchBrandingData,
{
refetchOnWindowFocus: false, // Do not refetch when window gains focus
}
);
useEffect( () => {
if ( result.isError && onError ) {
onError( result.error as BrandingError );
}
}, [ result.isError, result.error, onError ] );
return result;
}

View File

@ -2,6 +2,7 @@
* External dependencies
*/
import { render, createRoot } from '@wordpress/element';
import { QueryClient, QueryClientProvider } from 'react-query';
/**
* Internal dependencies
@ -11,15 +12,23 @@ import { ProductNameSuggestions } from './product-name';
import './index.scss';
const queryClient = new QueryClient();
const renderComponent = ( Component, rootElement ) => {
if ( ! rootElement ) {
return;
}
const WrappedComponent = () => (
<QueryClientProvider client={ queryClient }>
<Component />
</QueryClientProvider>
);
if ( createRoot ) {
createRoot( rootElement ).render( <Component /> );
createRoot( rootElement ).render( <WrappedComponent /> );
} else {
render( <Component />, rootElement );
render( <WrappedComponent />, rootElement );
}
};

View File

@ -1,13 +1,14 @@
/**
* External dependencies
*/
import { useDispatch } from '@wordpress/data';
import { store as noticesStore } from '@wordpress/notices';
import { __ } from '@wordpress/i18n';
import { useState, useEffect, useRef } from '@wordpress/element';
import {
__experimentalUseCompletion as useCompletion,
UseCompletionError,
} from '@woocommerce/ai';
import { useDispatch } from '@wordpress/data';
/**
* Internal dependencies
@ -18,7 +19,7 @@ import {
WOO_AI_PLUGIN_FEATURE_NAME,
} from '../constants';
import { StopCompletionBtn, WriteItForMeBtn } from '../components';
import { useFeedbackSnackbar, useTinyEditor } from '../hooks';
import { useFeedbackSnackbar, useStoreBranding, useTinyEditor } from '../hooks';
import {
getProductName,
getPostId,
@ -65,6 +66,28 @@ export function WriteItForMeButtonContainer() {
const [ productTitle, setProductTitle ] = useState< string >(
titleEl.current?.value || ''
);
const { createErrorNotice } = useDispatch( noticesStore );
const [ errorNoticeDismissed, setErrorNoticeDismissed ] = useState( false );
const { data: brandingData } = useStoreBranding( {
onError: () => {
if ( ! errorNoticeDismissed ) {
createErrorNotice(
__(
'Error fetching branding data, content generation may be degraded.',
'woocommerce'
),
{
id: 'woo-ai-branding-error',
type: 'snackbar',
isDismissible: true,
onDismiss: () => setErrorNoticeDismissed( true ),
}
);
}
},
} );
const tinyEditor = useTinyEditor();
const shortTinyEditor = useTinyEditor( 'excerpt' );
@ -174,7 +197,7 @@ export function WriteItForMeButtonContainer() {
productPropsInstructions.push(
`Tagged with: ${ productTags.join( ', ' ) }.`
);
includedProps.push( 'categories' );
includedProps.push( 'tags' );
}
productAttributes.forEach( ( { name, values } ) => {
productPropsInstructions.push(
@ -183,21 +206,41 @@ export function WriteItForMeButtonContainer() {
includedProps.push( name );
} );
return [
`Compose an engaging product description for a product named "${ productName.slice(
0,
MAX_TITLE_LENGTH
) }".`,
// WooCommerce doesn't set a limit for the product title. Set a limit to control the token usage.
const truncatedProductName = productName.slice( 0, MAX_TITLE_LENGTH );
const instructions = [
`Compose an engaging product description for a product named "${ truncatedProductName }."`,
...productPropsInstructions,
'Identify the language used in the product name, and craft the description in the same language.',
`Use a 9th grade reading level.`,
`Ensure the description is concise, containing no more than ${ DESCRIPTION_MAX_LENGTH } words.`,
'Structure the content into paragraphs using <p> tags, and use HTML elements like <strong> and <em> for emphasis.',
'Only if appropriate, use <ul> and <li> for listing product features.',
`Avoid including the properties (${ includedProps.join(
', '
) }) directly in the description, but utilize them to create an engaging and enticing portrayal of the product.`,
'Do not include a top-level heading at the beginning description.',
].join( ' ' );
'Identify the language used in the product name, and craft the description in the same language.',
'Only if appropriate, use <ul> and <li> tags to list product features.',
'Do not include a top-level heading at the beginning of the description.',
];
if ( includedProps.length > 0 ) {
instructions.push(
`Avoid including the properties (${ includedProps.join(
', '
) }) directly in the description, but utilize them to create an engaging and enticing portrayal of the product.`
);
}
if ( brandingData?.toneOfVoice ) {
instructions.push(
`Generate the description using a ${ brandingData.toneOfVoice } tone.`
);
}
if ( brandingData?.businessDescription ) {
instructions.push(
`For more context on the business, refer to the following business description: "${ brandingData.businessDescription }."`
);
}
return instructions.join( '\n' );
};
const onWriteItForMeClick = async () => {

View File

@ -0,0 +1,41 @@
/**
* External dependencies
*/
import apiFetch from '@wordpress/api-fetch';
// Define the expected shape of the API response
type ApiResponse = {
value: string;
};
/**
* Fetch the tone of voice setting.
*
* @return {Promise<string>} A promise that resolves with the tone of voice or 'neutral' if the API call fails.
*/
export async function getToneOfVoice(): Promise< string > {
try {
const { value } = await apiFetch< ApiResponse >( {
path: '/wc/v3/settings/woo-ai/tone-of-voice',
} );
return value;
} catch ( error ) {
throw error;
}
}
/**
* Fetch the business description setting.
*
* @return {Promise<string>} A promise that resolves with the business description.
*/
export async function getBusinessDescription(): Promise< string > {
try {
const { value } = await apiFetch< ApiResponse >( {
path: '/wc/v3/settings/woo-ai/store-description',
} );
return value;
} catch ( error ) {
throw error;
}
}

View File

@ -445,7 +445,7 @@ importers:
version: 0.1.3
jest-runner-groups:
specifier: ^2.1.0
version: 2.2.0(jest-docblock@29.4.3)(jest-runner@29.5.0)
version: 2.2.0(jest-docblock@29.4.3)(jest-runner@29.6.2)
postman-collection:
specifier: ^4.1.0
version: 4.1.5
@ -1264,7 +1264,7 @@ importers:
version: 0.2.0
'@woocommerce/e2e-utils':
specifier: ^0.1.6
version: 0.1.6(@woocommerce/api@0.2.0)(jest@27.5.1)(puppeteer@2.1.1)(react-native@0.70.0)
version: 0.1.6(@woocommerce/api@0.2.0)(jest@29.6.2)(puppeteer@2.1.1)(react-native@0.70.0)
'@wordpress/deprecated':
specifier: wp-6.0
version: 3.6.1
@ -1434,7 +1434,7 @@ importers:
version: 3.6.1
'@wordpress/e2e-test-utils':
specifier: wp-6.0
version: 7.2.1(jest@27.5.1)(puppeteer-core@19.7.3)
version: 7.2.1(jest@29.6.2)(puppeteer-core@19.7.3)
config:
specifier: 3.3.7
version: 3.3.7
@ -2487,6 +2487,9 @@ importers:
'@wordpress/i18n':
specifier: wp-6.0
version: 4.6.1
'@wordpress/notices':
specifier: wp-6.0
version: 3.6.1(react@17.0.2)
'@wordpress/plugins':
specifier: wp-6.0
version: 4.4.3(react@17.0.2)
@ -2502,6 +2505,9 @@ importers:
react-dom:
specifier: ^17.0.2
version: 17.0.2(react@17.0.2)
react-query:
specifier: ^3.39.3
version: 3.39.3(react-dom@17.0.2)(react@17.0.2)
devDependencies:
'@types/debug':
specifier: ^4.1.7
@ -4040,7 +4046,7 @@ packages:
debug: 4.3.3
i18n-calypso: 6.0.1(@types/react@17.0.50)(react@17.0.2)
react: 17.0.2
react-query: 3.39.1(react-dom@17.0.2)(react@17.0.2)
react-query: 3.39.3(react-dom@17.0.2)(react@17.0.2)
socket.io-client: 2.3.0
transitivePeerDependencies:
- '@types/react'
@ -4191,7 +4197,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.21.3
'@jridgewell/trace-mapping': 0.3.16
'@jridgewell/trace-mapping': 0.3.19
commander: 4.1.1
convert-source-map: 1.8.0
fs-readdir-recursive: 1.1.0
@ -10855,6 +10861,7 @@ packages:
jest-message-util: 29.5.0
jest-util: 29.5.0
slash: 3.0.0
dev: true
/@jest/console@29.6.2:
resolution: {integrity: sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==}
@ -10866,7 +10873,6 @@ packages:
jest-message-util: 29.6.2
jest-util: 29.6.2
slash: 3.0.0
dev: true
/@jest/core@24.9.0:
resolution: {integrity: sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==}
@ -11112,7 +11118,6 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/@jest/create-cache-key-function@27.5.1:
resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==}
@ -11168,6 +11173,7 @@ packages:
'@jest/types': 29.5.0
'@types/node': 16.18.21
jest-mock: 29.5.0
dev: true
/@jest/environment@29.6.2:
resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==}
@ -11177,20 +11183,19 @@ packages:
'@jest/types': 29.6.1
'@types/node': 16.18.21
jest-mock: 29.6.2
dev: true
/@jest/expect-utils@29.5.0:
resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.4.3
dev: true
/@jest/expect-utils@29.6.2:
resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.4.3
dev: true
/@jest/expect@29.5.0:
resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==}
@ -11200,6 +11205,7 @@ packages:
jest-snapshot: 29.5.0
transitivePeerDependencies:
- supports-color
dev: true
/@jest/expect@29.6.2:
resolution: {integrity: sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==}
@ -11209,7 +11215,6 @@ packages:
jest-snapshot: 29.6.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/fake-timers@24.9.0:
resolution: {integrity: sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==}
@ -11266,6 +11271,7 @@ packages:
jest-message-util: 29.5.0
jest-mock: 29.5.0
jest-util: 29.5.0
dev: true
/@jest/fake-timers@29.6.2:
resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==}
@ -11277,7 +11283,6 @@ packages:
jest-message-util: 29.6.2
jest-mock: 29.6.2
jest-util: 29.6.2
dev: true
/@jest/globals@25.5.2:
resolution: {integrity: sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==}
@ -11315,6 +11320,7 @@ packages:
jest-mock: 29.5.0
transitivePeerDependencies:
- supports-color
dev: true
/@jest/globals@29.6.2:
resolution: {integrity: sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==}
@ -11326,7 +11332,6 @@ packages:
jest-mock: 29.6.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/reporters@24.9.0:
resolution: {integrity: sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==}
@ -11536,20 +11541,19 @@ packages:
v8-to-istanbul: 9.1.0
transitivePeerDependencies:
- supports-color
dev: true
/@jest/schemas@29.4.3:
resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.25.24
dev: true
/@jest/schemas@29.6.0:
resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.27.8
dev: true
/@jest/source-map@24.9.0:
resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==}
@ -11593,6 +11597,7 @@ packages:
'@jridgewell/trace-mapping': 0.3.17
callsites: 3.1.0
graceful-fs: 4.2.9
dev: true
/@jest/source-map@29.6.0:
resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==}
@ -11601,7 +11606,6 @@ packages:
'@jridgewell/trace-mapping': 0.3.19
callsites: 3.1.0
graceful-fs: 4.2.9
dev: true
/@jest/test-result@24.9.0:
resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==}
@ -11649,6 +11653,7 @@ packages:
'@jest/types': 29.5.0
'@types/istanbul-lib-coverage': 2.0.3
collect-v8-coverage: 1.0.1
dev: true
/@jest/test-result@29.6.2:
resolution: {integrity: sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==}
@ -11658,7 +11663,6 @@ packages:
'@jest/types': 29.6.1
'@types/istanbul-lib-coverage': 2.0.3
collect-v8-coverage: 1.0.1
dev: true
/@jest/test-sequencer@24.9.0:
resolution: {integrity: sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==}
@ -11736,7 +11740,6 @@ packages:
graceful-fs: 4.2.9
jest-haste-map: 29.6.2
slash: 3.0.0
dev: true
/@jest/transform@24.9.0:
resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==}
@ -11851,6 +11854,7 @@ packages:
write-file-atomic: 4.0.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/transform@29.6.2:
resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==}
@ -11873,7 +11877,6 @@ packages:
write-file-atomic: 4.0.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/types@24.9.0:
resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==}
@ -11924,6 +11927,7 @@ packages:
'@types/node': 16.18.21
'@types/yargs': 17.0.24
chalk: 4.1.2
dev: true
/@jest/types@29.6.1:
resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==}
@ -11935,7 +11939,6 @@ packages:
'@types/node': 16.18.21
'@types/yargs': 17.0.24
chalk: 4.1.2
dev: true
/@jridgewell/gen-mapping@0.1.1:
resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
@ -11968,6 +11971,7 @@ packages:
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@jridgewell/trace-mapping@0.3.17:
resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
@ -11980,7 +11984,6 @@ packages:
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@ -13271,10 +13274,10 @@ packages:
/@sinclair/typebox@0.25.24:
resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==}
dev: true
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
dev: true
/@sindresorhus/is@4.6.0:
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
@ -17833,14 +17836,14 @@ packages:
transitivePeerDependencies:
- supports-color
/@woocommerce/e2e-utils@0.1.6(@woocommerce/api@0.2.0)(jest@27.5.1)(puppeteer@2.1.1)(react-native@0.70.0):
/@woocommerce/e2e-utils@0.1.6(@woocommerce/api@0.2.0)(jest@29.6.2)(puppeteer@2.1.1)(react-native@0.70.0):
resolution: {integrity: sha512-gWSEgFIjMqaqiiIyrpa1epIHkmBBAfk6WfRojva1f5ZmffSJCc0VbX2jQQRdFm1BuEYr8KGCCYo+q8NIjlMZ7g==}
peerDependencies:
'@woocommerce/api': ^0.2.0
dependencies:
'@woocommerce/api': 0.2.0
'@wordpress/deprecated': 2.12.3
'@wordpress/e2e-test-utils': 4.16.1(jest@27.5.1)(puppeteer@2.1.1)(react-native@0.70.0)
'@wordpress/e2e-test-utils': 4.16.1(jest@29.6.2)(puppeteer@2.1.1)(react-native@0.70.0)
config: 3.3.3
faker: 5.5.3
fishery: 1.4.0
@ -19519,7 +19522,26 @@ packages:
- react-native
dev: false
/@wordpress/e2e-test-utils@7.2.1(jest@27.5.1)(puppeteer-core@19.7.3):
/@wordpress/e2e-test-utils@4.16.1(jest@29.6.2)(puppeteer@2.1.1)(react-native@0.70.0):
resolution: {integrity: sha512-Dpsq5m0VSvjIhro2MjACSzkOkOf1jGEryzgEMW1ikbT6YI+motspHfGtisKXgYhZJOnjV4PwuEg+9lPVnd971g==}
engines: {node: '>=8'}
peerDependencies:
jest: '>=24'
puppeteer: '>=1.19.0'
dependencies:
'@babel/runtime': 7.21.0
'@wordpress/keycodes': 2.19.3
'@wordpress/url': 2.22.2(react-native@0.70.0)
jest: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
lodash: 4.17.21
node-fetch: 2.6.7
puppeteer: 2.1.1
transitivePeerDependencies:
- encoding
- react-native
dev: false
/@wordpress/e2e-test-utils@7.2.1(jest@29.6.2)(puppeteer-core@19.7.3):
resolution: {integrity: sha512-eqo4quzgGFArZLLocC5sPfdCLiiS9zMTCRs+Kn4Tl4lLDOLhTk9I1MZcBkvJJ0Qd75FEcdeLaqNaSYNCu6rgyw==}
engines: {node: '>=12'}
peerDependencies:
@ -19531,7 +19553,7 @@ packages:
'@wordpress/keycodes': 3.6.1
'@wordpress/url': 3.7.1
form-data: 4.0.0
jest: 27.5.1
jest: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
lodash: 4.17.21
node-fetch: 2.6.7
puppeteer-core: 19.7.3(typescript@5.1.6)
@ -22022,10 +22044,10 @@ packages:
peerDependencies:
eslint: '>= 4.12.1'
dependencies:
'@babel/code-frame': 7.16.7
'@babel/parser': 7.17.8
'@babel/traverse': 7.17.3
'@babel/types': 7.17.0
'@babel/code-frame': 7.18.6
'@babel/parser': 7.21.3
'@babel/traverse': 7.21.3
'@babel/types': 7.22.4
eslint: 7.32.0
eslint-visitor-keys: 1.3.0
resolve: 1.20.0
@ -22248,7 +22270,6 @@ packages:
slash: 3.0.0
transitivePeerDependencies:
- supports-color
dev: true
/babel-loader@8.2.3(@babel/core@7.17.8)(webpack@5.70.0):
resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==}
@ -22452,7 +22473,6 @@ packages:
'@babel/types': 7.22.4
'@types/babel__core': 7.1.16
'@types/babel__traverse': 7.14.2
dev: true
/babel-plugin-macros@2.8.0:
resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==}
@ -22988,7 +23008,6 @@ packages:
'@babel/core': 7.21.3
babel-plugin-jest-hoist: 29.5.0
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3)
dev: true
/babel-runtime@6.26.0:
resolution: {integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=}
@ -25713,7 +25732,6 @@ packages:
peerDependenciesMeta:
babel-plugin-macros:
optional: true
dev: true
/deep-eql@3.0.1:
resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==}
@ -27792,7 +27810,8 @@ packages:
jest-get-type: 29.4.3
jest-matcher-utils: 29.5.0
jest-message-util: 29.5.0
jest-util: 29.5.0
jest-util: 29.6.2
dev: true
/expect@29.6.2:
resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==}
@ -27804,7 +27823,6 @@ packages:
jest-matcher-utils: 29.6.2
jest-message-util: 29.6.2
jest-util: 29.6.2
dev: true
/expose-loader@3.1.0(webpack@5.70.0):
resolution: {integrity: sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA==}
@ -31520,7 +31538,6 @@ packages:
dependencies:
execa: 5.1.1
p-limit: 3.1.0
dev: true
/jest-circus@26.6.3:
resolution: {integrity: sha512-ACrpWZGcQMpbv13XbzRzpytEJlilP/Su0JtNCi5r/xLpOUhnaIJr8leYYpLEMgPFURZISEHrnnpmB54Q/UziPw==}
@ -31636,7 +31653,6 @@ packages:
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
dev: true
/jest-cli@24.9.0:
resolution: {integrity: sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==}
@ -31798,7 +31814,6 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/jest-config@24.9.0:
resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==}
@ -32009,7 +32024,6 @@ packages:
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
dev: true
/jest-dev-server@4.4.0:
resolution: {integrity: sha512-STEHJ3iPSC8HbrQ3TME0ozGX2KT28lbT4XopPxUm2WimsX3fcB3YOptRh12YphQisMhfqNSNTZUmWyT3HEXS2A==}
@ -32100,6 +32114,7 @@ packages:
diff-sequences: 29.4.3
jest-get-type: 29.4.3
pretty-format: 29.5.0
dev: true
/jest-diff@29.6.2:
resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==}
@ -32109,7 +32124,6 @@ packages:
diff-sequences: 29.4.3
jest-get-type: 29.4.3
pretty-format: 29.6.2
dev: true
/jest-docblock@24.9.0:
resolution: {integrity: sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==}
@ -32193,10 +32207,10 @@ packages:
resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.5.0
'@jest/types': 29.6.1
chalk: 4.1.2
jest-get-type: 29.4.3
jest-util: 29.5.0
jest-util: 29.6.2
pretty-format: 29.5.0
dev: true
@ -32209,7 +32223,6 @@ packages:
jest-get-type: 29.4.3
jest-util: 29.6.2
pretty-format: 29.6.2
dev: true
/jest-environment-jsdom@24.9.0:
resolution: {integrity: sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==}
@ -32359,6 +32372,7 @@ packages:
'@types/node': 16.18.21
jest-mock: 29.5.0
jest-util: 29.5.0
dev: true
/jest-environment-node@29.6.2:
resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==}
@ -32370,7 +32384,6 @@ packages:
'@types/node': 16.18.21
jest-mock: 29.6.2
jest-util: 29.6.2
dev: true
/jest-environment-puppeteer@4.4.0:
resolution: {integrity: sha512-iV8S8+6qkdTM6OBR/M9gKywEk8GDSOe05hspCs5D8qKSwtmlUfdtHfB4cakdc68lC6YfK3AUsLirpfgodCHjzQ==}
@ -32519,6 +32532,7 @@ packages:
walker: 1.0.8
optionalDependencies:
fsevents: 2.3.2
dev: true
/jest-haste-map@29.6.2:
resolution: {integrity: sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==}
@ -32537,7 +32551,6 @@ packages:
walker: 1.0.8
optionalDependencies:
fsevents: 2.3.2
dev: true
/jest-jasmine2@24.9.0:
resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==}
@ -32682,6 +32695,7 @@ packages:
dependencies:
jest-get-type: 29.4.3
pretty-format: 29.5.0
dev: true
/jest-leak-detector@29.6.2:
resolution: {integrity: sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==}
@ -32689,7 +32703,6 @@ packages:
dependencies:
jest-get-type: 29.4.3
pretty-format: 29.6.2
dev: true
/jest-matcher-utils@24.9.0:
resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==}
@ -32737,6 +32750,7 @@ packages:
jest-diff: 29.5.0
jest-get-type: 29.4.3
pretty-format: 29.5.0
dev: true
/jest-matcher-utils@29.6.2:
resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==}
@ -32746,7 +32760,6 @@ packages:
jest-diff: 29.6.2
jest-get-type: 29.4.3
pretty-format: 29.6.2
dev: true
/jest-message-util@24.9.0:
resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==}
@ -32820,6 +32833,7 @@ packages:
pretty-format: 29.5.0
slash: 3.0.0
stack-utils: 2.0.5
dev: true
/jest-message-util@29.6.2:
resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==}
@ -32834,7 +32848,6 @@ packages:
pretty-format: 29.6.2
slash: 3.0.0
stack-utils: 2.0.5
dev: true
/jest-mock-extended@1.0.18(jest@27.5.1)(typescript@5.1.6):
resolution: {integrity: sha512-qf1n7lIa2dTxxPIBr+FlXrbj3hnV1sG9DPZsrr2H/8W+Jw0wt6OmeOQsPcjRuW8EXIECC9pDXsSIfEdn+HP7JQ==}
@ -32883,6 +32896,7 @@ packages:
'@jest/types': 29.5.0
'@types/node': 16.18.21
jest-util: 29.5.0
dev: true
/jest-mock@29.6.2:
resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==}
@ -32891,7 +32905,6 @@ packages:
'@jest/types': 29.6.1
'@types/node': 16.18.21
jest-util: 29.6.2
dev: true
/jest-pnp-resolver@1.2.2(jest-resolve@24.9.0):
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
@ -32950,6 +32963,7 @@ packages:
optional: true
dependencies:
jest-resolve: 29.5.0
dev: true
/jest-pnp-resolver@1.2.2(jest-resolve@29.6.2):
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
@ -32961,7 +32975,6 @@ packages:
optional: true
dependencies:
jest-resolve: 29.6.2
dev: true
/jest-puppeteer@4.4.0(puppeteer-core@3.0.0):
resolution: {integrity: sha512-ZaiCTlPZ07B9HW0erAWNX6cyzBqbXMM7d2ugai4epBDKpKvRDpItlRQC6XjERoJELKZsPziFGS0OhhUvTvQAXA==}
@ -33069,7 +33082,6 @@ packages:
jest-snapshot: 29.6.2
transitivePeerDependencies:
- supports-color
dev: true
/jest-resolve@24.9.0:
resolution: {integrity: sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==}
@ -33139,6 +33151,7 @@ packages:
resolve: 1.22.1
resolve.exports: 2.0.2
slash: 3.0.0
dev: true
/jest-resolve@29.6.2:
resolution: {integrity: sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==}
@ -33153,9 +33166,8 @@ packages:
resolve: 1.22.1
resolve.exports: 2.0.2
slash: 3.0.0
dev: true
/jest-runner-groups@2.2.0(jest-docblock@29.4.3)(jest-runner@29.5.0):
/jest-runner-groups@2.2.0(jest-docblock@29.4.3)(jest-runner@29.6.2):
resolution: {integrity: sha512-Sp/B9ZX0CDAKa9dIkgH0sGyl2eDuScV4SVvOxqhBMxqWpsNAkmol/C58aTFmPWZj+C0ZTW1r1BSu66MTCN+voA==}
engines: {node: '>= 10.14.2'}
peerDependencies:
@ -33163,7 +33175,7 @@ packages:
jest-runner: '>= 24'
dependencies:
jest-docblock: 29.4.3
jest-runner: 29.5.0
jest-runner: 29.6.2
dev: false
/jest-runner@24.9.0:
@ -33315,6 +33327,7 @@ packages:
source-map-support: 0.5.13
transitivePeerDependencies:
- supports-color
dev: true
/jest-runner@29.6.2:
resolution: {integrity: sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==}
@ -33343,7 +33356,6 @@ packages:
source-map-support: 0.5.13
transitivePeerDependencies:
- supports-color
dev: true
/jest-runtime@24.9.0:
resolution: {integrity: sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==}
@ -33514,6 +33526,7 @@ packages:
strip-bom: 4.0.0
transitivePeerDependencies:
- supports-color
dev: true
/jest-runtime@29.6.2:
resolution: {integrity: sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==}
@ -33543,7 +33556,6 @@ packages:
strip-bom: 4.0.0
transitivePeerDependencies:
- supports-color
dev: true
/jest-serializer@24.9.0:
resolution: {integrity: sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==}
@ -33695,6 +33707,7 @@ packages:
semver: 7.5.3
transitivePeerDependencies:
- supports-color
dev: true
/jest-snapshot@29.6.2:
resolution: {integrity: sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==}
@ -33722,7 +33735,6 @@ packages:
semver: 7.5.3
transitivePeerDependencies:
- supports-color
dev: true
/jest-util@24.9.0:
resolution: {integrity: sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==}
@ -33787,6 +33799,7 @@ packages:
ci-info: 3.2.0
graceful-fs: 4.2.9
picomatch: 2.3.1
dev: true
/jest-util@29.6.2:
resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==}
@ -33798,7 +33811,6 @@ packages:
ci-info: 3.2.0
graceful-fs: 4.2.9
picomatch: 2.3.1
dev: true
/jest-validate@24.9.0:
resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==}
@ -33856,6 +33868,7 @@ packages:
jest-get-type: 29.4.3
leven: 3.1.0
pretty-format: 29.5.0
dev: true
/jest-validate@29.6.2:
resolution: {integrity: sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==}
@ -33867,7 +33880,6 @@ packages:
jest-get-type: 29.4.3
leven: 3.1.0
pretty-format: 29.6.2
dev: true
/jest-watcher@24.9.0:
resolution: {integrity: sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==}
@ -33933,6 +33945,7 @@ packages:
emittery: 0.13.1
jest-util: 29.5.0
string-length: 4.0.2
dev: true
/jest-watcher@29.6.2:
resolution: {integrity: sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==}
@ -33946,7 +33959,6 @@ packages:
emittery: 0.13.1
jest-util: 29.6.2
string-length: 4.0.2
dev: true
/jest-worker@24.9.0:
resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==}
@ -33988,6 +34000,7 @@ packages:
jest-util: 29.5.0
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
/jest-worker@29.6.2:
resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==}
@ -33997,7 +34010,6 @@ packages:
jest-util: 29.6.2
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
/jest@24.9.0:
resolution: {integrity: sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==}
@ -34102,7 +34114,6 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/jmespath@0.16.0:
resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==}
@ -39142,6 +39153,7 @@ packages:
'@jest/schemas': 29.4.3
ansi-styles: 5.2.0
react-is: 18.2.0
dev: true
/pretty-format@29.6.2:
resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==}
@ -39150,7 +39162,6 @@ packages:
'@jest/schemas': 29.6.0
ansi-styles: 5.2.0
react-is: 18.2.0
dev: true
/pretty-hrtime@1.0.3:
resolution: {integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=}
@ -39487,7 +39498,6 @@ packages:
/pure-rand@6.0.1:
resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==}
dev: true
/q@1.5.1:
resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=}
@ -40189,8 +40199,8 @@ packages:
react-dom: 17.0.2(react@17.0.2)
dev: false
/react-query@3.39.1(react-dom@17.0.2)(react@17.0.2):
resolution: {integrity: sha512-qYKT1bavdDiQZbngWZyPotlBVzcBjDYEJg5RQLBa++5Ix5jjfbEYJmHSZRZD+USVHUSvl/ey9Hu+QfF1QAK80A==}
/react-query@3.39.3(react-dom@17.0.2)(react@17.0.2):
resolution: {integrity: sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: '*'
@ -45097,7 +45107,6 @@ packages:
'@jridgewell/trace-mapping': 0.3.17
'@types/istanbul-lib-coverage': 2.0.3
convert-source-map: 1.8.0
dev: true
/v8flags@3.1.3:
resolution: {integrity: sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==}
@ -46622,7 +46631,6 @@ packages:
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
dev: true
/yargs-unparser@1.6.0:
resolution: {integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==}
@ -46701,7 +46709,6 @@ packages:
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
dev: true
/yargs@4.8.1:
resolution: {integrity: sha1-wMQpJMpKqmsObaFznfshZDn53cA=}