diff --git a/.mockoon/beyondwords-api.json b/.mockoon/beyondwords-api.json
index 1a971c8e..2cd4134a 100644
--- a/.mockoon/beyondwords-api.json
+++ b/.mockoon/beyondwords-api.json
@@ -119,13 +119,6 @@
"filePath": "",
"sendFileAsBody": false,
"rules": [
- {
- "target": "header",
- "modifier": "Content-Type",
- "value": "application/json",
- "operator": "equals",
- "invert": false
- },
{
"target": "header",
"modifier": "X-Api-Key",
@@ -276,7 +269,7 @@
},
{
"uuid": "ecdb7657-8a38-4380-937e-54204529d2e5",
- "body": "{\n \"id\": \"9279c9e0-e0b5-4789-9040-f44478ed3e9e\",\n \"title\": \"{{body 'title' 'Title'}}\",\n \"type\": \"auto_segment\",\n \"source_id\": \"{{body 'source_id' '90e4cbff-6382-4a88-adc5-1eb3ffa16c6d'}}\",\n \"source_url\": \"{{body 'source_url' 'https://example.com'}}\",\n \"author\": \"{{body 'author' 'Jane Smith'}}\",\n \"image_url\": \"{{body 'image' 'https://example.com/image.jpg'}}\",\n \"audio\": [\n {\n \"id\": 12192819,\n \"content_type\": \"application/x-mpegURL\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/e8219ee2f3465d6834984f9ae607a81e.m3u8\",\n \"duration\": 2685,\n \"base64_file\": null,\n \"variant\": \"article\"\n },\n {\n \"id\": 12192811,\n \"content_type\": \"audio/mpeg\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/fd7108e13a7c7fee6820a1b07bb676e0_compiled.mp3\",\n \"duration\": 2712,\n \"base64_file\": null,\n \"variant\": \"article\"\n }\n ],\n \"video\": [],\n \"ads_enabled\": true,\n \"is_copy\": false,\n \"title_voice_id\": 2517,\n \"summary_voice_id\": 2517,\n \"body_voice_id\": 2517,\n \"title_enabled\": true,\n \"body_enabled\": true,\n \"summary_enabled\": true,\n \"summary_title_enabled\": false,\n \"summarization\": {\n \"audio\": [],\n \"video\": []\n },\n \"background_track\": null,\n \"language\": \"{{body 'language' 'en_US'}}\",\n \"preview_token\": \"d9ce36ea-ddc4-4611-b60c-4f90ed0fc082\",\n \"status\": \"processed\",\n \"metadata\": {\n \"categories\": [\n \"News\", \n \"Audio\"\n ]\n },\n \"created\": \"2022-01-02T23:59:59Z\",\n \"updated\": \"2022-03-04T00:00:00Z\",\n \"published\": true,\n \"publish_date\": \"2099-12-31T23:59:59Z\",\n \"auto_segment_updates_enabled\": false,\n \"ai_summary_updates_enabled\": true,\n \"summary\": \"{{body 'summary' 'Summary'}}\",\n \"body\": \"
Test.
\",\n \"summarization_settings\": null,\n \"video_settings\": null\n}",
+ "body": "{\n \"id\": \"9279c9e0-e0b5-4789-9040-f44478ed3e9e\",\n \"title\": \"{{body 'title' 'Title'}}\",\n \"type\": \"auto_segment\",\n \"source_id\": \"{{body 'source_id' '90e4cbff-6382-4a88-adc5-1eb3ffa16c6d'}}\",\n \"source_url\": \"{{body 'source_url' 'https://example.com'}}\",\n \"author\": \"{{body 'author' 'Jane Smith'}}\",\n \"image_url\": \"{{body 'image' 'https://example.com/image.jpg'}}\",\n \"audio\": [\n {\n \"id\": 12192819,\n \"content_type\": \"application/x-mpegURL\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/e8219ee2f3465d6834984f9ae607a81e.m3u8\",\n \"duration\": 2685,\n \"base64_file\": null,\n \"variant\": \"article\"\n },\n {\n \"id\": 12192811,\n \"content_type\": \"audio/mpeg\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/fd7108e13a7c7fee6820a1b07bb676e0_compiled.mp3\",\n \"duration\": 2712,\n \"base64_file\": null,\n \"variant\": \"article\"\n }\n ],\n \"video\": [],\n \"ads_enabled\": true,\n \"is_copy\": false,\n \"title_voice_id\": 2517,\n \"summary_voice_id\": 2517,\n \"body_voice_id\": 2517,\n \"title_enabled\": true,\n \"body_enabled\": true,\n \"summary_enabled\": true,\n \"summary_title_enabled\": false,\n \"summarization\": {\n \"audio\": [],\n \"video\": []\n },\n \"background_track\": null,\n \"language\": \"{{body 'language' 'en_US'}}\",\n \"preview_token\": \"d9ce36ea-ddc4-4611-b60c-4f90ed0fc082\",\n \"status\": \"processed\",\n \"metadata\": {\n \"categories\": [\n \"News\", \n \"Audio\"\n ]\n },\n \"created\": \"2022-01-02T23:59:59Z\",\n \"updated\": \"2022-03-04T00:00:00Z\",\n \"published\": true,\n \"publish_date\": \"2099-12-31T23:59:59Z\",\n \"auto_segment_updates_enabled\": true,\n \"ai_summary_updates_enabled\": true,\n \"summary\": \"{{body 'summary' 'Summary'}}\",\n \"body\": \"Test.
\",\n \"summarization_settings\": null,\n \"video_settings\": null\n}",
"latency": 0,
"statusCode": 200,
"label": "OK",
@@ -414,7 +407,7 @@
},
{
"uuid": "52762211-f2da-4e53-a68f-74883e69e862",
- "body": "{\n \"id\": \"9279c9e0-e0b5-4789-9040-f44478ed3e9e\",\n \"title\": \"{{body 'title' 'Title'}}\",\n \"type\": \"auto_segment\",\n \"source_id\": \"{{body 'source_id' '90e4cbff-6382-4a88-adc5-1eb3ffa16c6d'}}\",\n \"source_url\": \"{{body 'source_url' 'https://example.com'}}\",\n \"author\": \"{{body 'author' 'Jane Smith'}}\",\n \"image_url\": \"{{body 'image' 'https://example.com/image.jpg'}}\",\n \"audio\": [\n {\n \"id\": 12192819,\n \"content_type\": \"application/x-mpegURL\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/e8219ee2f3465d6834984f9ae607a81e.m3u8\",\n \"duration\": 2685,\n \"base64_file\": null,\n \"variant\": \"article\"\n },\n {\n \"id\": 12192811,\n \"content_type\": \"audio/mpeg\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/fd7108e13a7c7fee6820a1b07bb676e0_compiled.mp3\",\n \"duration\": 2712,\n \"base64_file\": null,\n \"variant\": \"article\"\n }\n ],\n \"video\": [],\n \"ads_enabled\": true,\n \"is_copy\": false,\n \"title_voice_id\": 2517,\n \"summary_voice_id\": 2517,\n \"body_voice_id\": 2517,\n \"title_enabled\": true,\n \"body_enabled\": true,\n \"summary_enabled\": true,\n \"summary_title_enabled\": false,\n \"summarization\": {\n \"audio\": [],\n \"video\": []\n },\n \"background_track\": null,\n \"language\": \"{{body 'language' 'en_US'}}\",\n \"preview_token\": \"d9ce36ea-ddc4-4611-b60c-4f90ed0fc082\",\n \"status\": \"processed\",\n \"metadata\": {\n \"categories\": [\n \"News\", \n \"Audio\"\n ]\n },\n \"created\": \"2022-01-02T23:59:59Z\",\n \"updated\": \"2022-03-04T00:00:00Z\",\n \"published\": true,\n \"publish_date\": \"2099-12-31T23:59:59Z\",\n \"auto_segment_updates_enabled\": false,\n \"ai_summary_updates_enabled\": true,\n \"summary\": \"{{body 'summary' 'Summary'}}\",\n \"body\": \"Test.
\",\n \"summarization_settings\": null,\n \"video_settings\": null\n}",
+ "body": "{\n \"id\": \"9279c9e0-e0b5-4789-9040-f44478ed3e9e\",\n \"title\": \"{{body 'title' 'Title'}}\",\n \"type\": \"auto_segment\",\n \"source_id\": \"{{body 'source_id' '90e4cbff-6382-4a88-adc5-1eb3ffa16c6d'}}\",\n \"source_url\": \"{{body 'source_url' 'https://example.com'}}\",\n \"author\": \"{{body 'author' 'Jane Smith'}}\",\n \"image_url\": \"{{body 'image' 'https://example.com/image.jpg'}}\",\n \"audio\": [\n {\n \"id\": 12192819,\n \"content_type\": \"application/x-mpegURL\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/e8219ee2f3465d6834984f9ae607a81e.m3u8\",\n \"duration\": 2685,\n \"base64_file\": null,\n \"variant\": \"article\"\n },\n {\n \"id\": 12192811,\n \"content_type\": \"audio/mpeg\",\n \"url\": \"https://beyondwords-cdn-b7fyckdeejejb6dj.a03.azurefd.net/audio/projects/9969/podcasts/3161419/media/fd7108e13a7c7fee6820a1b07bb676e0_compiled.mp3\",\n \"duration\": 2712,\n \"base64_file\": null,\n \"variant\": \"article\"\n }\n ],\n \"video\": [],\n \"ads_enabled\": true,\n \"is_copy\": false,\n \"title_voice_id\": 2517,\n \"summary_voice_id\": 2517,\n \"body_voice_id\": 2517,\n \"title_enabled\": true,\n \"body_enabled\": true,\n \"summary_enabled\": true,\n \"summary_title_enabled\": false,\n \"summarization\": {\n \"audio\": [],\n \"video\": []\n },\n \"background_track\": null,\n \"language\": \"{{body 'language' 'en_US'}}\",\n \"preview_token\": \"d9ce36ea-ddc4-4611-b60c-4f90ed0fc082\",\n \"status\": \"processed\",\n \"metadata\": {\n \"categories\": [\n \"News\", \n \"Audio\"\n ]\n },\n \"created\": \"2022-01-02T23:59:59Z\",\n \"updated\": \"2022-03-04T00:00:00Z\",\n \"published\": true,\n \"publish_date\": \"2099-12-31T23:59:59Z\",\n \"auto_segment_updates_enabled\": true,\n \"ai_summary_updates_enabled\": true,\n \"summary\": \"{{body 'summary' 'Summary'}}\",\n \"body\": \"Test.
\",\n \"summarization_settings\": null,\n \"video_settings\": null\n}",
"latency": 0,
"statusCode": 200,
"label": "OK",
@@ -720,13 +713,6 @@
"filePath": "",
"sendFileAsBody": false,
"rules": [
- {
- "target": "header",
- "modifier": "Content-Type",
- "value": "application/json",
- "operator": "equals",
- "invert": false
- },
{
"target": "header",
"modifier": "X-Api-Key",
@@ -962,13 +948,6 @@
"filePath": "",
"sendFileAsBody": false,
"rules": [
- {
- "target": "header",
- "modifier": "Content-Type",
- "value": "application/json",
- "operator": "equals",
- "invert": false
- },
{
"target": "header",
"modifier": "X-Api-Key",
diff --git a/doc/wp-config.md b/doc/wp-config.md
index 67733a3c..f7ae08f4 100644
--- a/doc/wp-config.md
+++ b/doc/wp-config.md
@@ -20,13 +20,3 @@ Defaults to `true`.
```php
define('BEYONDWORDS_AUTOREGENERATE', false);
```
-
-## BEYONDWORDS_PLAYER_INLINE_SCRIPT_TAG
-
-Use the recommended BeyondWords inline player script.
-Defaults to `false`.
-From plugin version `6.0` this will default to `true`.
-
-```php
-define('BEYONDWORDS_PLAYER_INLINE_SCRIPT_TAG', true);
-```
diff --git a/package.json b/package.json
index 41359825..9dda72ce 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"@wordpress/eslint-plugin": "^22.5.1",
"@wordpress/scripts": "^30.12.1",
"badge-maker": "^4.1.0",
- "cypress": "14.3.3",
+ "cypress": "15.1.0",
"cypress-fail-fast": "^7.1.1",
"cypress-map": "^1.45.0",
"cypress-multi-reporters": "^2.0.5",
diff --git a/readme.txt b/readme.txt
index a842ab65..87ec9dfd 100755
--- a/readme.txt
+++ b/readme.txt
@@ -86,7 +86,11 @@ Release date: TBC
**Enhancements and Features:**
-* Make PHP methods static.
+* [#449](https://github.com/beyondwords-io/wordpress-plugin/pull/449) Magic Embed for WordPress.
+ * An **Integration method** plugin setting has been added in the *Content* tab.
+ * The default is **REST API**. This method will continue to send post content and metadata to BeyondWords using REST API calls.
+ * If **Magic Embed** is selected then [Client-Side Integration](https://github.com/beyondwords-io/player/blob/main/doc/client-side-integration.md) will be enabed for new posts. With this method BeyondWords handles the extraction and delivery of audio content using the rendered HTML for the post.
+* [#447](https://github.com/beyondwords-io/wordpress-plugin/pull/447) Make PHP methods static.
= 5.5.0 =
diff --git a/src/Compatibility/WPGraphQL/WPGraphQL.php b/src/Compatibility/WPGraphQL/WPGraphQL.php
index e13bbff9..1d67fae0 100644
--- a/src/Compatibility/WPGraphQL/WPGraphQL.php
+++ b/src/Compatibility/WPGraphQL/WPGraphQL.php
@@ -34,13 +34,17 @@ public static function init()
* @since 3.6.0
* @since 4.0.0 Register contentId field, and contentId/podcastId are now String, not Int
* @since 4.7.0 Moved graphqlRegisterTypes() from Beyondwords\Wordpress\Core to here.
- * @since 6.0.0 Make static.
+ * @since 6.0.0 Make static, add sourceId field.
*/
public static function graphqlRegisterTypes()
{
register_graphql_object_type('Beyondwords', [
'description' => __('BeyondWords audio details. Use this data to embed an audio player using the BeyondWords JavaScript SDK.', 'speechkit'), // phpcs:ignore Generic.Files.LineLength.TooLong
'fields' => [
+ 'sourceId' => [
+ 'description' => __('BeyondWords source ID', 'speechkit'),
+ 'type' => 'String'
+ ],
'projectId' => [
'description' => __('BeyondWords project ID', 'speechkit'),
'type' => 'Int'
@@ -70,22 +74,24 @@ public static function graphqlRegisterTypes()
'type' => 'Beyondwords',
'description' => __('BeyondWords audio details', 'speechkit'),
'resolve' => function (WPGraphQLPlugin\Model\Post $post) {
- $beyondwords = [];
+ $fields = [
+ 'sourceId' => (string) $post->ID,
+ ];
- $contentId = PostMetaUtils::getContentId($post->ID);
+ $projectId = PostMetaUtils::getProjectId($post->ID);
- if (! empty($contentId)) {
- $beyondwords['contentId'] = $contentId;
- $beyondwords['podcastId'] = $contentId; // legacy
+ if (! empty($projectId)) {
+ $fields['projectId'] = $projectId;
}
- $projectId = PostMetaUtils::getProjectId($post->ID);
+ $contentId = PostMetaUtils::getContentId($post->ID);
- if (! empty($projectId)) {
- $beyondwords['projectId'] = $projectId;
+ if (! empty($contentId)) {
+ $fields['contentId'] = $contentId;
+ $fields['podcastId'] = $contentId; // legacy
}
- return ! empty($beyondwords) ? $beyondwords : null;
+ return $fields;
}
]);
}
diff --git a/src/Component/Post/BlockAttributes/BlockAttributes.php b/src/Component/Post/BlockAttributes/BlockAttributes.php
index aa2bc699..7f8b9a5d 100644
--- a/src/Component/Post/BlockAttributes/BlockAttributes.php
+++ b/src/Component/Post/BlockAttributes/BlockAttributes.php
@@ -90,7 +90,7 @@ public static function registerMarkerAttribute($args)
*
* @since 4.0.0
* @since 4.2.2 Rename method to renderBlock.
- * @since 6.0.0 Make static.
+ * @since 6.0.0 Make static and update for Magic Embed.
*
* @param string $blockContent The block content (HTML).
* @param string $block The full block, including name and attributes.
@@ -100,12 +100,12 @@ public static function registerMarkerAttribute($args)
public static function renderBlock($blockContent, $block)
{
// Skip adding marker if player UI is disabled
- if (get_option('beyondwords_player_ui', PlayerUI::ENABLED) === PlayerUI::DISABLED) {
+ if (get_option(PlayerUI::OPTION_NAME) === PlayerUI::DISABLED) {
return $blockContent;
}
- // Skip adding marker if no content ID exists
- if (! PostMetaUtils::getContentId(get_the_ID())) {
+ // Skip adding marker if no content exists
+ if (! PostMetaUtils::hasContent(get_the_ID())) {
return $blockContent;
}
diff --git a/src/Component/Post/DisplayPlayer/DisplayPlayer.php b/src/Component/Post/DisplayPlayer/DisplayPlayer.php
index e223f627..61f7119c 100644
--- a/src/Component/Post/DisplayPlayer/DisplayPlayer.php
+++ b/src/Component/Post/DisplayPlayer/DisplayPlayer.php
@@ -79,7 +79,7 @@ public static function save($postId)
*
* @since 6.0.0 Make static.
*
- * @param WP_Post $post The post object.
+ * @param \WP_Post $post The post object.
*/
public static function element($post)
{
diff --git a/src/Component/Post/GenerateAudio/GenerateAudio.php b/src/Component/Post/GenerateAudio/GenerateAudio.php
index 93ccd5ce..dee180a2 100644
--- a/src/Component/Post/GenerateAudio/GenerateAudio.php
+++ b/src/Component/Post/GenerateAudio/GenerateAudio.php
@@ -44,6 +44,8 @@ public static function init()
/**
* Check whether the post type should preselect the "Generate audio" checkbox.
*
+ * @param \WP_Post|int $post The post object or ID.
+ *
* @todo move this function to somewhere reusable for the Block editor.
*
* @since 6.0.0 Make static.
@@ -73,22 +75,13 @@ public static function shouldPreselectGenerateAudio($post)
/**
* Render the element.
*
- * @since 6.0.0 Make static.
+ * @since 6.0.0 Make static and refactor generate audio check.
*/
public static function element($post)
{
wp_nonce_field('beyondwords_generate_audio', 'beyondwords_generate_audio_nonce');
$generateAudio = PostMetaUtils::hasGenerateAudio($post->ID);
-
- if (! $generateAudio) {
- // Check whether "0" has explicitly been saved
- $generateAudioMeta = PostMetaUtils::getRenamedPostMeta($post->ID, 'generate_audio', true);
-
- if ($generateAudioMeta !== '0' && self::shouldPreselectGenerateAudio($post)) {
- $generateAudio = true;
- }
- }
?>
diff --git a/src/Component/Post/GenerateAudio/index.js b/src/Component/Post/GenerateAudio/index.js
index e06fed73..f98ceada 100644
--- a/src/Component/Post/GenerateAudio/index.js
+++ b/src/Component/Post/GenerateAudio/index.js
@@ -73,17 +73,13 @@ export default compose( [
beyondwords_generate_audio,
/* eslint-disable-next-line camelcase */
speechkit_generate_audio,
- /* eslint-disable-next-line camelcase */
- publish_post_to_speechkit,
} = getCurrentPostAttribute( 'meta' );
if (
/* eslint-disable-next-line camelcase */
beyondwords_generate_audio === '1' ||
/* eslint-disable-next-line camelcase */
- speechkit_generate_audio === '1' ||
- /* eslint-disable-next-line camelcase */
- publish_post_to_speechkit === '1'
+ speechkit_generate_audio === '1'
) {
return true;
}
@@ -92,9 +88,7 @@ export default compose( [
/* eslint-disable-next-line camelcase */
beyondwords_generate_audio === '0' ||
/* eslint-disable-next-line camelcase */
- speechkit_generate_audio === '0' ||
- /* eslint-disable-next-line camelcase */
- publish_post_to_speechkit === '0'
+ speechkit_generate_audio === '0'
) {
return false;
}
diff --git a/src/Component/Post/Metabox/Metabox.php b/src/Component/Post/Metabox/Metabox.php
index b68ce753..ef43c7c3 100644
--- a/src/Component/Post/Metabox/Metabox.php
+++ b/src/Component/Post/Metabox/Metabox.php
@@ -96,7 +96,7 @@ public static function addMetaBox($postType)
* @since 3.7.0 Show "Pending review" notice for posts with status of "pending"
* @since 4.0.0 Content ID is no longer an int
* @since 4.1.0 Add "Player style" and update component display conditions
- * @since 6.0.0 Make static.
+ * @since 6.0.0 Make static and add Magic Embed support.
*/
public static function renderMetaBoxContent($post)
{
@@ -109,9 +109,9 @@ public static function renderMetaBoxContent($post)
// Show errors for posts with/without audio
self::errors($post);
- $contentId = PostMetaUtils::getContentId($post->ID);
+ $hasContent = PostMetaUtils::hasContent($post->ID);
- if ($contentId) {
+ if ($hasContent) {
// Enable these components for posts with audio
if (get_post_status($post) === 'pending') {
self::pendingReviewNotice($post);
@@ -181,7 +181,7 @@ public static function pendingReviewNotice($post)
*
* @since 3.x Introduced
* @since 4.0.1 Admin player init is now all in this one function.
- * @since 6.0.0 Make static.
+ * @since 6.0.0 Make static and add Magic Embed support.
*/
public static function playerEmbed($post = null)
{
@@ -191,21 +191,28 @@ public static function playerEmbed($post = null)
return;
}
- $projectId = PostMetaUtils::getProjectId($post->ID);
- $contentId = PostMetaUtils::getContentId($post->ID);
- $previewToken = PostMetaUtils::getPreviewToken($post->ID);
+ $projectId = PostMetaUtils::getProjectId($post->ID);
+ $hasContent = PostMetaUtils::hasContent($post->ID);
- if (! $projectId || ! $contentId) {
+ if (! $projectId || ! $hasContent) {
return;
}
+ $contentId = PostMetaUtils::getContentId($post->ID);
+ $previewToken = PostMetaUtils::getPreviewToken($post->ID);
+
+ // phpcs:disable WordPress.WP.EnqueuedResources.NonEnqueuedScript
?>
- ID);
- $contentId = PostMetaUtils::getContentId($post->ID);
-
- $params = [
- 'projectId' => is_numeric($projectId) ? (int)$projectId : $projectId,
- 'contentId' => is_numeric($contentId) ? (int)$contentId : $contentId,
- ];
-
- // Set initial SDK params from plugin settings
- $params = self::addPluginSettingsToSdkParams($params);
-
- // Player UI
- $playerUI = get_option('beyondwords_player_ui', PlayerUI::ENABLED);
- if ($playerUI === PlayerUI::HEADLESS) {
- $params['showUserInterface'] = false;
- }
-
- // Player Style
- // @todo overwrite global styles with post settings
- $playerStyle = PostMetaUtils::getPlayerStyle($post->ID);
- if (!empty($playerStyle)) {
- $params['playerStyle'] = $playerStyle;
- }
-
- // Player Content
- $playerContent = get_post_meta($post->ID, 'beyondwords_player_content', true);
- if (!empty($playerContent)) {
- $params['loadContentAs'] = [ $playerContent ];
- }
-
- /**
- * Filters the BeyondWords JavaScript SDK parameters.
- *
- * @since 4.0.0
- *
- * @param array $params The default JS SDK params.
- * @param int $postId The Post ID.
- */
- $params = apply_filters('beyondwords_player_sdk_params', $params, $post->ID);
-
- // Cast assoc array to object
- return (object)$params;
- }
-
- /**
- * Add plugin settings to SDK params.
- *
- * @since 5.0.0
- * @since 6.0.0 Make static.
- *
- * @param array $params BeyondWords Player SDK params.
- *
- * @return array Modified SDK params.
- */
- public static function addPluginSettingsToSdkParams($params)
- {
- $mapping = [
- 'beyondwords_player_style' => 'playerStyle',
- 'beyondwords_player_call_to_action' => 'callToAction',
- 'beyondwords_player_highlight_sections' => 'highlightSections',
- 'beyondwords_player_widget_style' => 'widgetStyle',
- 'beyondwords_player_widget_position' => 'widgetPosition',
- 'beyondwords_player_skip_button_style' => 'skipButtonStyle',
- ];
-
- foreach ($mapping as $wpOption => $sdkParam) {
- $val = get_option($wpOption);
- if (!empty($val)) {
- $params[$sdkParam] = $val;
- }
- }
-
- // Special case for clickableSections
- $val = get_option('beyondwords_player_clickable_sections');
- if (!empty($val)) {
- $params['clickableSections'] = 'body';
- }
-
- return $params;
- }
-
- /**
- * Use Player JS SDK?
- *
- * @since 3.0.7
- * @since 6.0.0 Make static.
- *
- * @return string
- */
- public static function usePlayerJsSdk()
- {
- // AMP requests don't use the Player JS SDK
- if (self::useAmpPlayer()) {
- return false;
- }
-
- // Both Gutenberg/Classic editors have their own player scripts
- if (CoreUtils::isGutenbergPage() || CoreUtils::isEditScreen()) {
- return false;
- }
-
- // Disable audio player in Preview, because we have not sent updates to BeyondWords API yet
- if (function_exists('is_preview') && is_preview()) {
- return false;
- }
-
- $post = get_post();
-
- if (! $post) {
- return false;
- }
-
- $projectId = PostMetaUtils::getProjectId($post->ID);
- if (! $projectId) {
- return false;
- }
-
- $contentId = PostMetaUtils::getContentId($post->ID);
- if (! $contentId) {
- return false;
- }
-
- return true;
- }
-}
\ No newline at end of file
+}
diff --git a/src/Core/Player/PlayerInline.php b/src/Core/Player/PlayerInline.php
deleted file mode 100644
index a7a7cfd3..00000000
--- a/src/Core/Player/PlayerInline.php
+++ /dev/null
@@ -1,537 +0,0 @@
-ID);
-
- if (! $projectId) {
- return '';
- }
-
- $contentId = PostMetaUtils::getContentId($post->ID);
-
- if (! $contentId) {
- return '';
- }
-
- // AMP or JS Player?
- if (self::useAmpPlayer()) {
- $html = self::ampPlayerHtml($post->ID, $projectId, $contentId);
- } else {
- $html = self::jsPlayerHtml($post->ID, $projectId, $contentId);
- }
-
- /**
- * Filters the HTML of the BeyondWords Player.
- *
- * @since 4.0.0
- * @since 4.3.0 Applied to both AMP and no-AMP content.
- *
- * @param string $html The HTML for the JS audio player. The audio player JavaScript may
- * fail to locate the target element if you remove or replace the
- * default contents of this parameter.
- * @param int $postId WordPress post ID.
- * @param int $projectId BeyondWords project ID.
- * @param int $contentId BeyondWords content ID.
- */
- $html = apply_filters('beyondwords_player_html', $html, $post->ID, $projectId, $contentId);
-
- return $html;
- }
-
- /**
- * Has custom player?
- *
- * Checks the post content to see whether a custom player has been added.
- *
- * @since 3.2.0
- * @since 4.2.0 Pass $content as a parameter, check for [beyondwords_player] shortcode
- * @since 4.2.4 Check $content is a string
- * @since 6.0.0 Make static.
- *
- * @param string $content WordPress content.
- *
- * @return boolean
- */
- public static function hasCustomPlayer($content)
- {
- if (! is_string($content)) {
- return false;
- }
-
- if (strpos($content, '[beyondwords_player]') !== false) {
- return true;
- }
-
- $crawler = new Crawler($content);
-
- return count($crawler->filterXPath('//div[@data-beyondwords-player="true"]')) > 0;
- }
-
- /**
- * JS Player HTML.
- *
- * Displays the HTML required for the JS player.
- *
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- *
- * @param int $postId WordPress Post ID.
- * @param int $projectId BeyondWords Project ID.
- * @param int $contentId BeyondWords Content ID.
- *
- * @since 3.0.0
- * @since 3.1.0 Added speechkit_js_player_html filter
- * @since 4.2.0 Remove hasCustomPlayer() check from here.
- * @since 5.2.0 Replace div[data-beyondwords-player] with script[onload]
- * @since 5.3.0 Use new jsPlayerParams() object return.
- * @since 6.0.0 Make static.
- *
- * @return string
- */
- public static function jsPlayerHtml($postId, $projectId, $contentId)
- {
- if (! self::usePlayerJsSdk()) {
- return '';
- }
-
- $post = get_post($postId);
- $params = self::jsPlayerParams($post);
-
- $playerUI = get_option('beyondwords_player_ui', PlayerUI::ENABLED);
-
- $params->projectId = $projectId;
- $params->contentId = $contentId;
-
- $jsonParams = wp_json_encode($params, JSON_UNESCAPED_SLASHES);
-
- // Headless instantiates a player without a target
- if ($playerUI !== PlayerUI::HEADLESS) {
- $jsonParams = sprintf('{...%s, target:this}', $jsonParams);
- }
-
- $onload = sprintf('new BeyondWords.Player(%s);', $jsonParams);
-
- /**
- * Filters the onload attribute of the BeyondWords Player script.
- *
- * Note that to support multiple players on one page, the
- * default script uses `document.querySelectorAll() to target all
- * instances of `div[data-beyondwords-player]` in the HTML source.
- * If this approach is removed then multiple occurrences of the
- * BeyondWords player in one page may not work as expected.
- *
- * @link https://github.com/beyondwords-io/player/blob/main/doc/getting-started.md#how-to-configure-it
- *
- * @since 4.0.0
- *
- * @param string $script The string value of the onload script.
- * @param array $params The SDK params for the current post, including
- * `projectId` and `contentId`.
- */
- $onload = apply_filters('beyondwords_player_script_onload', $onload, $params);
-
- $html = sprintf(
- // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
- '',
- Environment::getJsSdkUrl(),
- $onload
- );
-
- return $html;
- }
-
- /**
- * AMP Player HTML.
- *
- * Displays the HTML required for the AMP player.
- *
- * @param int $postId WordPress Post ID.
- * @param int $projectId BeyondWords Project ID.
- * @param int $contentId BeyondWords Content ID.
- *
- * @since 3.0.0
- * @since 3.1.0 Added speechkit_amp_player_html filter
- * @since 6.0.0 Make static.
- *
- * @return string
- */
- public static function ampPlayerHtml($postId, $projectId, $contentId)
- {
- $src = sprintf(Environment::getAmpPlayerUrl(), $projectId, $contentId);
-
- // Turn on output buffering
- ob_start();
-
- ?>
-
-
-
- ID)) {
- $enabled = false;
- }
-
- // Is the player ui enabled in plugin settings?
- if ($enabled) {
- $enabled = get_option('beyondwords_player_ui', PlayerUI::ENABLED) === PlayerUI::ENABLED;
- }
-
- return $enabled;
- }
-
- /**
- * Use the AMP player?
- *
- * There are multiple AMP plugins for WordPress, so multiple checks are performed.
- *
- * @since 3.0.7
- * @since 6.0.0 Make static.
- * @since 6.0.0 Make static.
- *
- * @return bool
- */
- public static function useAmpPlayer()
- {
- // https://amp-wp.org/reference/function/amp_is_request/
- if (function_exists('amp_is_request')) {
- return \amp_is_request();
- }
-
- // https://ampforwp.com/tutorials/article/detect-amp-page-function/
- if (function_exists('ampforwp_is_amp_endpoint')) {
- return \ampforwp_is_amp_endpoint();
- }
-
- // https://amp-wp.org/reference/function/is_amp_endpoint/
- if (function_exists('is_amp_endpoint')) {
- return \is_amp_endpoint();
- }
-
- return false;
- }
-
- /**
- * Use Player JS SDK?
- *
- * @since 3.0.7
- * @since 6.0.0 Make static.
- *
- * @return string
- */
- public static function usePlayerJsSdk()
- {
- // AMP requests don't use the Player JS SDK
- if (self::useAmpPlayer()) {
- return false;
- }
-
- // Both Gutenberg/Classic editors have their own player scripts
- if (CoreUtils::isGutenbergPage() || CoreUtils::isEditScreen()) {
- return false;
- }
-
- // Disable audio player in Preview, because we have not sent updates to BeyondWords API yet
- if (function_exists('is_preview') && is_preview()) {
- return false;
- }
-
- $post = get_post();
-
- if (! $post) {
- return false;
- }
-
- $projectId = PostMetaUtils::getProjectId($post->ID);
- $contentId = PostMetaUtils::getContentId($post->ID);
-
- if ($projectId && $contentId) {
- return true;
- }
-
- return false;
- }
-
- /**
- * JavaScript SDK parameters.
- *
- * @since 3.1.0
- * @since 4.0.0 Use new JS SDK params format.
- * @since 5.3.0 Prioritise post-specific player settings, falling-back to the
- * values of the "Player" tab in the plugin settings.
- * @since 5.3.0 Support loadContentAs param and return an object.
- * @since 6.0.0 Make static.
- *
- * @param WP_Post $post WordPress Post.
- *
- * @return object
- */
- public static function jsPlayerParams($post)
- {
- if (!($post instanceof \WP_Post)) {
- return [];
- }
-
- $projectId = PostMetaUtils::getProjectId($post->ID);
- $contentId = PostMetaUtils::getContentId($post->ID);
-
- $params = [
- 'projectId' => is_numeric($projectId) ? (int)$projectId : $projectId,
- 'contentId' => is_numeric($contentId) ? (int)$contentId : $contentId,
- ];
-
- // Set initial SDK params from plugin settings
- $params = self::addPluginSettingsToSdkParams($params);
-
- // Player UI
- $playerUI = get_option('beyondwords_player_ui', PlayerUI::ENABLED);
- if ($playerUI === PlayerUI::HEADLESS) {
- $params['showUserInterface'] = false;
- }
-
- // Player Style
- // @todo overwrite global styles with post settings
- $playerStyle = PostMetaUtils::getPlayerStyle($post->ID);
- if (!empty($playerStyle)) {
- $params['playerStyle'] = $playerStyle;
- }
-
- // Player content
- $playerContent = get_post_meta($post->ID, 'beyondwords_player_content', true);
- if (!empty($playerContent)) {
- $params['loadContentAs'] = [ $playerContent ];
- }
-
- /**
- * Filters the BeyondWords JavaScript SDK parameters.
- *
- * @since 4.0.0
- *
- * @param array $params The default JS SDK params.
- * @param int $postId The Post ID.
- */
- $params = apply_filters('beyondwords_player_sdk_params', $params, $post->ID);
-
- // Cast assoc array to object
- return (object)$params;
- }
-
- /**
- * Add plugin settings to SDK params.
- *
- * @since 5.0.0
- * @since 6.0.0 Make static.
- *
- * @param array $params BeyondWords Player SDK params.
- *
- * @return array Modified SDK params.
- */
- public static function addPluginSettingsToSdkParams($params)
- {
- $mapping = [
- 'beyondwords_player_style' => 'playerStyle',
- 'beyondwords_player_call_to_action' => 'callToAction',
- 'beyondwords_player_highlight_sections' => 'highlightSections',
- 'beyondwords_player_widget_style' => 'widgetStyle',
- 'beyondwords_player_widget_position' => 'widgetPosition',
- 'beyondwords_player_skip_button_style' => 'skipButtonStyle',
- ];
-
- foreach ($mapping as $wpOption => $sdkParam) {
- $val = get_option($wpOption);
- if (!empty($val)) {
- $params[$sdkParam] = $val;
- }
- }
-
- // Special case for clickableSections
- $val = get_option('beyondwords_player_clickable_sections');
- if (!empty($val)) {
- $params['clickableSections'] = 'body';
- }
-
- return $params;
- }
-}
diff --git a/src/Core/Player/Renderer/Amp.php b/src/Core/Player/Renderer/Amp.php
new file mode 100644
index 00000000..ee5c9616
--- /dev/null
+++ b/src/Core/Player/Renderer/Amp.php
@@ -0,0 +1,93 @@
+ID);
+
+ if (! $hasProjectId) {
+ return false;
+ }
+
+ $integrationMethod = get_post_meta($post->ID, 'beyondwords_integration_method', true);
+
+ if ($integrationMethod === IntegrationMethod::CLIENT_SIDE) {
+ return true;
+ }
+
+ $hasContentId = (bool) PostMetaUtils::getContentId($post->ID, true);
+
+ return $hasContentId;
+ }
+
+ /**
+ * Render AMP player HTML.
+ *
+ * @param \WP_Post $post
+ *
+ * @return string HTML markup for AMP player.
+ */
+ public static function render(\WP_Post $post): string
+ {
+ $projectId = PostMetaUtils::getProjectId($post->ID);
+ $contentId = PostMetaUtils::getContentId($post->ID, true); // Fallback to Post ID if Content ID is not set
+
+ $src = sprintf(Environment::getAmpPlayerUrl(), $projectId, $contentId);
+
+ ob_start();
+ ?>
+
+
+
+ ID, $projectId, $contentId);
+ }
+}
\ No newline at end of file
diff --git a/src/Core/Player/Renderer/Javascript.php b/src/Core/Player/Renderer/Javascript.php
new file mode 100644
index 00000000..8bf78ba7
--- /dev/null
+++ b/src/Core/Player/Renderer/Javascript.php
@@ -0,0 +1,76 @@
+ID);
+
+ if (! $projectId) {
+ return false;
+ }
+
+ $contentId = PostMetaUtils::getContentId($post->ID);
+ $method = IntegrationMethod::getIntegrationMethod($post);
+
+ return $method === IntegrationMethod::CLIENT_SIDE ||
+ ($method === IntegrationMethod::REST_API && $contentId);
+ }
+
+ /**
+ * Render the JavaScript player HTML.
+ *
+ * @param \WP_Post $post
+ * @return string HTML output.
+ */
+ public static function render($post): string
+ {
+ if (PlayerUI::DISABLED === get_option(PlayerUI::OPTION_NAME)) {
+ return '';
+ }
+
+ $params = ConfigBuilder::build($post);
+
+ $jsonParams = wp_json_encode($params, JSON_UNESCAPED_SLASHES);
+ $jsonParams = sprintf('{target:this, ...%s}', $jsonParams);
+
+ $onload = sprintf('new BeyondWords.Player(%s);', $jsonParams);
+ $onload = apply_filters('beyondwords_player_script_onload', $onload, $params);
+
+ return sprintf(
+ // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
+ '',
+ Environment::getJsSdkUrl(),
+ $onload
+ );
+ }
+}
diff --git a/src/Core/Request.php b/src/Core/Request.php
index 25b1ac43..0fa7f21a 100644
--- a/src/Core/Request.php
+++ b/src/Core/Request.php
@@ -7,106 +7,158 @@
class Request
{
public const AUTH_HEADER_NAME = 'X-Api-Key';
+
public const CONTENT_TYPE_HEADER_NAME = 'Content-Type';
+
public const CONTENT_TYPE_HEADER_VALUE = 'application/json';
- private $method;
- private $url;
- private $body;
- private $headers;
+ private string $method = '';
+
+ private string $url = '';
+
+ private string $body = '';
+
+ private array $headers = [];
/**
+ * Request constructor.
+ *
* @param string $method
* @param string $url
* @param mixed $body
+ * @param array $headers
+ *
+ * @return void
*/
- public function __construct($method, $url, $body = null, $headers = null)
- {
+ public function __construct(
+ string $method,
+ string $url,
+ string $body = '',
+ array $headers = []
+ ) {
$this->setMethod($method);
$this->setUrl($url);
$this->setBody($body);
- if ($headers === null) {
- $headers = $this->getDefaultHeaders();
+ // Add API key header to all requests.
+ $this->addHeaders([
+ self::AUTH_HEADER_NAME => get_option('beyondwords_api_key'),
+ ]);
+
+ // Add Content-Type header for non-GET requests.
+ if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
+ // Default headers.
+ $this->addHeaders([
+ self::CONTENT_TYPE_HEADER_NAME => self::CONTENT_TYPE_HEADER_VALUE,
+ ]);
}
- $this->setHeaders($headers);
+ // Add custom headers.
+ $this->addHeaders($headers);
}
/**
- * @return mixed
+ * Get the HTTP method for the request.
+ *
+ * @return string
*/
- public function getMethod()
+ public function getMethod(): string
{
return $this->method;
}
/**
- * @param mixed $method
+ * Set the HTTP method for the request.
+ *
+ * @param string $method
+ *
+ * @return void
*/
- public function setMethod($method)
+ public function setMethod(string $method): void
{
$this->method = strtoupper($method);
}
/**
- * @return mixed
+ * Get the URL for the request.
+ *
+ * @return string
*/
- public function getUrl()
+ public function getUrl(): string
{
return $this->url;
}
/**
- * @param mixed $url
+ * Set the URL for the request.
+ *
+ * @param string $url
+ *
+ * @return void
*/
- public function setUrl($url)
+ public function setUrl(string $url): void
{
$this->url = $url;
}
/**
- * @return mixed
+ * Get the body for the request.
+ *
+ * @return string
*/
- public function getBody()
+ public function getBody(): string
{
return $this->body;
}
/**
- * @param mixed $body
+ * Set the body for the request.
+ *
+ * @param string $body
+ *
+ * @return void
*/
- public function setBody($body)
+ public function setBody(string $body): void
{
$this->body = $body;
}
/**
- * Get default headers (Authorization & Content-Type).
+ * Get the headers for the request.
*
- * @return mixed
+ * @return array
*/
- public function getDefaultHeaders()
+ public function getHeaders(): array
{
- return [
- self::AUTH_HEADER_NAME => get_option('beyondwords_api_key'),
- self::CONTENT_TYPE_HEADER_NAME => self::CONTENT_TYPE_HEADER_VALUE,
- ];
+ return $this->headers;
}
/**
- * @return mixed
+ * Set the headers to the request.
+ *
+ * @param array $headers
+ *
+ * @return void
*/
- public function getHeaders()
+ public function setHeaders(array $headers): void
{
- return $this->headers;
+ $this->headers = $headers;
}
/**
- * @param mixed $headers
+ * Add extra headers to the request.
+ *
+ * @since 6.0.0 Introduced.
+ *
+ * @param array $headers
+ *
+ * @return void
*/
- public function setHeaders($headers)
+ public function addHeaders(array $headers): void
{
- $this->headers = $headers;
+ $this->setHeaders(array_merge(
+ (array) $this->getHeaders(),
+ $headers
+ ));
}
}
diff --git a/src/Plugin.php b/src/Plugin.php
index 7e87db05..bfe4c810 100644
--- a/src/Plugin.php
+++ b/src/Plugin.php
@@ -6,9 +6,7 @@
use Beyondwords\Wordpress\Compatibility\WPGraphQL\WPGraphQL;
use Beyondwords\Wordpress\Core\Core;
-use Beyondwords\Wordpress\Core\Environment;
use Beyondwords\Wordpress\Core\Player\Player;
-use Beyondwords\Wordpress\Core\Player\PlayerInline;
use Beyondwords\Wordpress\Core\Updater;
use Beyondwords\Wordpress\Component\Post\AddPlayer\AddPlayer;
use Beyondwords\Wordpress\Component\Post\BlockAttributes\BlockAttributes;
@@ -53,12 +51,8 @@ public static function init()
// Site health
SiteHealth::init();
- // Player (inline or not)
- if (Environment::hasPlayerInlineScriptTag()) {
- PlayerInline::init();
- } else {
- Player::init();
- }
+ // Player
+ Player::init();
// Settings
Settings::init();
diff --git a/tests/cypress/e2e/block-editor/add-post.cy.js b/tests/cypress/e2e/block-editor/add-post.cy.js
index 13d2bded..c4d5d10b 100644
--- a/tests/cypress/e2e/block-editor/add-post.cy.js
+++ b/tests/cypress/e2e/block-editor/add-post.cy.js
@@ -17,21 +17,11 @@ context( 'Block Editor: Add Post', () => {
.filter( ( x ) => x.supported )
.forEach( ( postType ) => {
it( `can add a ${ postType.name } without audio`, () => {
- cy.createPost( {
+ cy.publishPostWithoutAudio( {
postType,
title: `I can add a ${ postType.name } without audio`,
} );
- cy.openBeyondwordsEditorPanel();
-
- cy.uncheckGenerateAudio( postType );
-
- cy.publishWithConfirmation();
-
- cy.getLabel( 'Generate audio' ).should( 'exist' );
-
- cy.hasPlayerInstances( 0 );
-
// "View post"
cy.viewPostViaSnackbar();
@@ -62,7 +52,7 @@ context( 'Block Editor: Add Post', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.visit(
@@ -93,7 +83,7 @@ context( 'Block Editor: Add Post', () => {
cy.get( '.editor-post-publish-button__button' ).click();
- cy.hasPlayerInstances( 0 );
+ cy.hasAdminPlayerInstances( 0 );
// "Generate Audio" is replaced by "Pending" message'
cy.get( 'input#beyondwords_generate_audio' ).should(
diff --git a/tests/cypress/e2e/block-editor/display-player.cy.js b/tests/cypress/e2e/block-editor/display-player.cy.js
index 524bc557..1945f94b 100644
--- a/tests/cypress/e2e/block-editor/display-player.cy.js
+++ b/tests/cypress/e2e/block-editor/display-player.cy.js
@@ -32,7 +32,7 @@ context( 'Block Editor: Display Player', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.visit(
@@ -67,8 +67,6 @@ context( 'Block Editor: Display Player', () => {
// "View post"
cy.viewPostViaSnackbar();
- // @todo the script should not be enqueued if the player is not displayed
- // cy.getEnqueuedPlayerScriptTag().should( 'not.exist' )
cy.hasPlayerInstances( 0 );
cy.visit(
@@ -104,7 +102,7 @@ context( 'Block Editor: Display Player', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
} );
} );
diff --git a/tests/cypress/e2e/block-editor/insert-beyondwords-player.cy.js b/tests/cypress/e2e/block-editor/insert-beyondwords-player.cy.js
index 0465a292..4dddc842 100644
--- a/tests/cypress/e2e/block-editor/insert-beyondwords-player.cy.js
+++ b/tests/cypress/e2e/block-editor/insert-beyondwords-player.cy.js
@@ -77,7 +77,7 @@ context( 'Block Editor: Insert BeyondWords Player', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
} );
@@ -117,7 +117,7 @@ context( 'Block Editor: Insert BeyondWords Player', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
} );
} );
diff --git a/tests/cypress/e2e/block-editor/player-content.cy.js b/tests/cypress/e2e/block-editor/player-content.cy.js
index 275128db..2136c544 100644
--- a/tests/cypress/e2e/block-editor/player-content.cy.js
+++ b/tests/cypress/e2e/block-editor/player-content.cy.js
@@ -64,19 +64,9 @@ context( 'Block Editor: Player Content', () => {
cy.viewPostViaSnackbar();
// Check Player appears frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].summary
- ).to.eq( false );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ loadContentAs: undefined,
} );
// Check Player content has also been saved in admin
@@ -108,19 +98,9 @@ context( 'Block Editor: Player Content', () => {
cy.viewPostViaSnackbar();
// Check Player appears frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].summary
- ).to.eq( true );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ loadContentAs: [ 'summary' ],
} );
// Check Player content has also been saved in admin
diff --git a/tests/cypress/e2e/block-editor/player-style.cy.js b/tests/cypress/e2e/block-editor/player-style.cy.js
index 9f6aebe0..a831cb40 100644
--- a/tests/cypress/e2e/block-editor/player-style.cy.js
+++ b/tests/cypress/e2e/block-editor/player-style.cy.js
@@ -111,19 +111,9 @@ context( 'Block Editor: Player Style', () => {
cy.viewPostViaSnackbar();
// Check Player has video player in frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].playerStyle
- ).to.eq( 'large' );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ playerStyle: 'large',
} );
// Check Player style has also been saved in admin
@@ -155,19 +145,9 @@ context( 'Block Editor: Player Style', () => {
cy.viewPostViaSnackbar();
// Check Player has video player in frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].playerStyle
- ).to.eq( 'video' );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ playerStyle: 'video',
} );
// Check Player style has also been saved in admin
diff --git a/tests/cypress/e2e/block-editor/segment-markers.cy.js b/tests/cypress/e2e/block-editor/segment-markers.cy.js
index 757e78ec..9c118f61 100644
--- a/tests/cypress/e2e/block-editor/segment-markers.cy.js
+++ b/tests/cypress/e2e/block-editor/segment-markers.cy.js
@@ -55,7 +55,7 @@ context( 'Block Editor: Segment markers', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'not.exist' );
+ cy.getPlayerScriptTag().should( 'not.exist' );
cy.hasNoBeyondwordsWindowObject();
cy.contains( 'p', 'One.' ).should(
@@ -123,7 +123,7 @@ context( 'Block Editor: Segment markers', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
testCases.forEach( ( testCase ) => {
@@ -185,7 +185,7 @@ context( 'Block Editor: Segment markers', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.get( '.entry-content p:not(:empty)' )
@@ -233,7 +233,7 @@ context( 'Block Editor: Segment markers', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.get( '.entry-content p:not(:empty)' )
@@ -279,7 +279,7 @@ context( 'Block Editor: Segment markers', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.get( '.entry-content p:not(:empty)' )
@@ -339,7 +339,7 @@ context( 'Block Editor: Segment markers', () => {
// "View post"
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.get( '.entry-content p:not(:empty)' )
diff --git a/tests/cypress/e2e/classic-editor/add-post.cy.js b/tests/cypress/e2e/classic-editor/add-post.cy.js
index 73f6b1c1..02bcbaec 100644
--- a/tests/cypress/e2e/classic-editor/add-post.cy.js
+++ b/tests/cypress/e2e/classic-editor/add-post.cy.js
@@ -55,9 +55,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( '#sample-permalink' ).click();
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'not.exist'
- );
+ cy.hasPlayerInstances( 0 );
cy.visit(
`/wp-admin/edit.php?post_type=${ postType.slug }&orderby=date&order=desc`
@@ -84,9 +82,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( 'a.row-title' ).click();
} );
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'not.exist'
- );
+ cy.hasPlayerInstances( 0 );
cy.get( 'input#beyondwords_generate_audio' ).should(
'not.be.checked'
@@ -99,9 +95,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( '#sample-permalink' ).click();
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'not.exist'
- );
+ cy.hasPlayerInstances( 0 );
cy.visit(
`/wp-admin/edit.php?post_type=${ postType.slug }&orderby=date&order=desc`
@@ -128,9 +122,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( 'a.row-title' ).click();
} );
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'not.exist'
- );
+ cy.hasPlayerInstances( 0 );
cy.get( 'input#beyondwords_generate_audio' ).check();
@@ -141,9 +133,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( '#sample-permalink' ).click();
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'exist'
- );
+ cy.hasPlayerInstances( 1 );
} );
it( `can add a new ${ postType.name } with audio`, () => {
@@ -178,9 +168,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( '#sample-permalink' ).click();
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'exist'
- );
+ cy.hasPlayerInstances( 1 );
// See a [tick] in the BeyondWords column' )
cy.visit(
@@ -197,8 +185,7 @@ context( 'Classic Editor: Add Post', () => {
} );
} );
- // @todo this skipped pending review test passes locally but fails in CI.
- it.skip( `can add a ${ postType.name } with "Pending review" audio `, () => {
+ it( `can add a ${ postType.name } with "Pending review" audio `, () => {
cy.createPost( {
postType,
} );
@@ -227,16 +214,13 @@ context( 'Classic Editor: Add Post', () => {
);
// Click "OK"
- cy.get( 'a.save-post-status' ).click();
-
- // Wait for Permalink to be generated
- cy.get( 'a#sample-permalink', { timeout: 20000 } );
+ cy.get( 'a.save-post-status', { timeout: 20000 } ).click();
// Click "Save as Pending" button
cy.get( 'input[value="Save as Pending"]' ).click();
// Wait for success message
- cy.get( 'div#message.notice-success', { timeout: 20000 } );
+ cy.get( 'div#message.notice-success' );
// "Generate Audio" should be replaced by custom "Pending" message
cy.get( 'input#beyondwords_generate_audio' ).should(
@@ -272,9 +256,7 @@ context( 'Classic Editor: Add Post', () => {
cy.get( 'a.row-title' ).click();
} );
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'not.exist'
- );
+ cy.hasPlayerInstances( 0 );
} );
} );
diff --git a/tests/cypress/e2e/classic-editor/display-player.cy.js b/tests/cypress/e2e/classic-editor/display-player.cy.js
index e203a499..700421e3 100644
--- a/tests/cypress/e2e/classic-editor/display-player.cy.js
+++ b/tests/cypress/e2e/classic-editor/display-player.cy.js
@@ -47,9 +47,7 @@ context( 'Classic Editor: Display Player', () => {
cy.get( '#sample-permalink' ).click();
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'not.exist'
- );
+ cy.hasPlayerInstances( 0 );
cy.visit(
`/wp-admin/edit.php?post_type=${ postType.slug }&orderby=date&order=desc`
@@ -81,9 +79,7 @@ context( 'Classic Editor: Display Player', () => {
cy.get( '#sample-permalink' ).click();
- cy.get( 'div[data-beyondwords-player="true"]' ).should(
- 'exist'
- );
+ cy.hasPlayerInstances( 1 );
} );
} );
} );
diff --git a/tests/cypress/e2e/classic-editor/insert-beyondwords-player.cy.js b/tests/cypress/e2e/classic-editor/insert-beyondwords-player.cy.js
index df4572a1..4d0cc232 100644
--- a/tests/cypress/e2e/classic-editor/insert-beyondwords-player.cy.js
+++ b/tests/cypress/e2e/classic-editor/insert-beyondwords-player.cy.js
@@ -55,9 +55,7 @@ context( 'Classic Editor: Insert BeyondWords Player', () => {
cy.get( '#sample-permalink' ).click();
// Count 3x players in frontend
- cy.get(
- 'div[data-beyondwords-player="true"][contenteditable="false"]'
- ).should( 'have.length', 3 );
+ cy.hasPlayerInstances( 3 );
} );
it( `can add shortcodes into a ${ postType.name }`, () => {
@@ -84,9 +82,7 @@ context( 'Classic Editor: Insert BeyondWords Player', () => {
cy.get( '#sample-permalink' ).click();
// Count 3x players in frontend
- cy.get(
- 'div[data-beyondwords-player="true"][contenteditable="false"]'
- ).should( 'have.length', 3 );
+ cy.hasPlayerInstances( 3 );
} );
} );
} );
diff --git a/tests/cypress/e2e/classic-editor/player-content.cy.js b/tests/cypress/e2e/classic-editor/player-content.cy.js
index c103546a..57fe40f6 100644
--- a/tests/cypress/e2e/classic-editor/player-content.cy.js
+++ b/tests/cypress/e2e/classic-editor/player-content.cy.js
@@ -65,19 +65,9 @@ context( 'Classic Editor: Player Content', () => {
cy.get( '#sample-permalink' ).click();
// Check Player appears frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].summary
- ).to.eq( false );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ loadContentAs: undefined,
} );
// Check Player content has also been saved in admin
@@ -118,19 +108,9 @@ context( 'Classic Editor: Player Content', () => {
cy.get( '#sample-permalink' ).click();
// Check Player appears frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].summary
- ).to.eq( true );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ loadContentAs: [ 'summary' ],
} );
// Check Player content has also been saved in admin
diff --git a/tests/cypress/e2e/classic-editor/player-style.cy.js b/tests/cypress/e2e/classic-editor/player-style.cy.js
index 054ffe11..2dadc22b 100644
--- a/tests/cypress/e2e/classic-editor/player-style.cy.js
+++ b/tests/cypress/e2e/classic-editor/player-style.cy.js
@@ -115,19 +115,9 @@ context( 'Classic Editor: Player Style', () => {
cy.get( '#sample-permalink' ).click();
// Check Player has large player in frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].playerStyle
- ).to.eq( 'large' );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ playerStyle: 'large',
} );
// Check Player style has also been saved in admin
@@ -166,19 +156,9 @@ context( 'Classic Editor: Player Style', () => {
cy.get( '#sample-permalink' ).click();
// Check Player has video player in frontend
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].playerStyle
- ).to.eq( 'video' );
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ playerStyle: 'video',
} );
// Check Player style has also been saved in admin
diff --git a/tests/cypress/e2e/filters.cy.js b/tests/cypress/e2e/filters.cy.js
index cd8abc52..7ae64957 100644
--- a/tests/cypress/e2e/filters.cy.js
+++ b/tests/cypress/e2e/filters.cy.js
@@ -25,41 +25,16 @@ describe( 'WordPress Filters', () => {
title: `I can filter Player SDK params for a ${ postType.name }`,
} );
- // Admin should have latest player
- cy.hasPlayerInstances( 1 );
-
- // Frontend should have a player div
- cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain desired SDK params from
+ // Frontend should have a player div with expected SDK params from
// tests/fixtures/wp-content/plugins/beyondwords-filter-player-sdk-params
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length(
- 1
- );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].iconColor
- ).to.eq( 'rgb(234, 75, 151)' );
- expect(
- win.BeyondWords.Player.instances()[ 0 ]
- .highlightSections
- ).to.eq( 'all-none' );
- expect(
- win.BeyondWords.Player.instances()[ 0 ]
- .clickableSections
- ).to.eq( 'none' );
- expect(
- win.BeyondWords.Player.instances()[ 0 ]
- .segmentWidgetSections
- ).to.eq( 'body' );
- expect(
- win.BeyondWords.Player.instances()[ 0 ]
- .segmentWidgetPosition
- ).to.eq( '10-oclock' );
+ cy.viewPostViaSnackbar();
+ cy.getPlayerScriptTag().should( 'exist' );
+ cy.hasPlayerInstances( 1, {
+ iconColor: 'rgb(234, 75, 151)',
+ highlightSections: 'all-none',
+ clickableSections: 'none',
+ segmentWidgetSections: 'body',
+ segmentWidgetPosition: '10-oclock',
} );
cy.deactivatePlugin( 'beyondwords-filter-player-sdk-params' );
@@ -73,12 +48,9 @@ describe( 'WordPress Filters', () => {
title: `I can filter Player script onload for a ${ postType.name }`,
} );
- // Admin should have latest player
- cy.hasPlayerInstances( 1 );
-
// Frontend should have a player div
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
// Check we have called console.log with expected values from testing plugin
@@ -98,38 +70,5 @@ describe( 'WordPress Filters', () => {
cy.deactivatePlugin( 'beyondwords-filter-player-sdk-params' );
} );
-
- it( `can filter Player inline script tag for a ${ postType.name }`, () => {
- cy.activatePlugin(
- 'beyondwords-filter-player-inline-script-tag'
- );
-
- cy.publishPostWithAudio( {
- postType,
- title: `I see the inline player script for a ${ postType.name }`,
- } );
-
- // Admin should have latest player
- cy.hasPlayerInstances( 1 );
-
- // Frontend SHOULD NOT have enqueued player script
- cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'not.exist' );
- cy.hasPlayerInstances( 1 );
-
- cy.deactivatePlugin(
- 'beyondwords-filter-player-inline-script-tag'
- );
-
- cy.publishPostWithAudio( {
- postType,
- title: `I see the legacy player script for a ${ postType.name }`,
- } );
-
- // Frontend SHOULD have enqueued player script
- cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
- } );
} );
} );
diff --git a/tests/cypress/e2e/plugins/amp.cy.js b/tests/cypress/e2e/plugins/amp.cy.js
index 189a40ee..5a710a1b 100644
--- a/tests/cypress/e2e/plugins/amp.cy.js
+++ b/tests/cypress/e2e/plugins/amp.cy.js
@@ -23,27 +23,17 @@ context( 'Plugins: AMP', () => {
.filter( ( x ) => [ 'post', 'page' ].includes( x.slug ) )
.forEach( ( postType ) => {
it( `${ postType.name } shows an player for AMP requests`, () => {
- cy.createPost( {
+ cy.publishPostWithAudio( {
postType,
title: `A ${ postType.slug } has an AMP iframe player`,
} );
- // cy.closeWelcomeToBlockEditorTips()
-
- cy.openBeyondwordsEditorPanel();
-
- cy.checkGenerateAudio( postType );
-
- cy.publishWithConfirmation();
-
- cy.hasPlayerInstances( 1 );
-
// "View post"
cy.viewPostViaSnackbar();
// Non-AMP requests have a JS player.
- cy.get( 'amp-iframe' ).should( 'not.exist' );
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
+ cy.get( 'amp-iframe' ).should( 'not.exist' );
+ cy.getPlayerScriptTag().should( 'exist' );
cy.hasPlayerInstances( 1 );
cy.url().then( ( url ) => {
@@ -52,7 +42,7 @@ context( 'Plugins: AMP', () => {
} );
cy.get( 'amp-iframe' ).should( 'exist' );
- cy.getEnqueuedPlayerScriptTag().should( 'not.exist' );
+ cy.getPlayerScriptTag().should( 'not.exist' );
cy.hasNoBeyondwordsWindowObject();
} );
} );
diff --git a/tests/cypress/e2e/settings/player/player-ui.cy.js b/tests/cypress/e2e/settings/player/player-ui.cy.js
index 4547d97b..502bcf64 100644
--- a/tests/cypress/e2e/settings/player/player-ui.cy.js
+++ b/tests/cypress/e2e/settings/player/player-ui.cy.js
@@ -20,22 +20,11 @@ context( 'Settings > Player UI', () => {
cy.publishPostWithAudio( { title: '"Enabled" Player UI' } );
- // Admin should have latest player
- cy.hasPlayerInstances( 1 );
-
// Frontend should have a player div
cy.viewPostViaSnackbar();
- cy.getEnqueuedPlayerScriptTag().should( 'exist' );
- cy.hasPlayerInstances( 1 );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length( 1 );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].showUserInterface
- ).to.eq( true );
+
+ cy.hasPlayerInstances( 1, {
+ showUserInterface: undefined,
} );
} );
@@ -48,22 +37,11 @@ context( 'Settings > Player UI', () => {
cy.publishPostWithAudio( { title: '"Headless" Player UI' } );
- // Admin should have latest player
- cy.hasPlayerInstances( 1 );
-
- // Frontend should have a player div without a UI
cy.viewPostViaSnackbar();
- cy.get( '.beyondwords-player.bwp' ).should( 'exist' );
- cy.get( '.beyondwords-player .user-interface' ).should( 'not.exist' );
-
- // window.BeyondWords should contain 1 player instance
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.exist;
- expect( win.BeyondWords.Player.instances() ).to.have.length( 1 );
- expect(
- win.BeyondWords.Player.instances()[ 0 ].showUserInterface
- ).to.eq( false );
+
+ // Frontend should have a player with showUserInterface set to false
+ cy.hasPlayerInstances( 1, {
+ showUserInterface: false,
} );
} );
@@ -76,17 +54,8 @@ context( 'Settings > Player UI', () => {
cy.publishPostWithAudio( { title: '"Disabled" Player UI' } );
- // Admin should have latest player
- cy.hasPlayerInstances( 1 );
-
// Frontend should not have a player div
cy.viewPostViaSnackbar();
- cy.get( '.beyondwords-player' ).should( 'not.exist' );
-
- // window.BeyondWords should be undefined
- cy.window().then( ( win ) => {
- // eslint-disable-next-line no-unused-expressions
- expect( win.BeyondWords ).to.not.exist;
- } );
+ cy.hasPlayerInstances( 0 );
} );
} );
diff --git a/tests/cypress/e2e/site-health.cy.js b/tests/cypress/e2e/site-health.cy.js
index 1b913d6a..511cb0ac 100644
--- a/tests/cypress/e2e/site-health.cy.js
+++ b/tests/cypress/e2e/site-health.cy.js
@@ -78,9 +78,16 @@ context( 'Site Health', () => {
);
cy.get( 'td' ).should( 'have.text', 'cpt_unsupported' );
} );
- // API Key
+ // Integration method
cy.get( 'tr' )
.eq( 5 )
+ .within( () => {
+ cy.get( 'th' ).should( 'have.text', 'Integration method' );
+ cy.get( 'td' ).should( 'have.text', 'rest-api' );
+ } );
+ // API Key
+ cy.get( 'tr' )
+ .eq( 6 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'API Key' );
cy.get( 'td' )
@@ -97,7 +104,7 @@ context( 'Site Health', () => {
} );
// Project ID
cy.get( 'tr' )
- .eq( 6 )
+ .eq( 7 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Project ID' );
cy.get( 'td' ).should(
@@ -107,7 +114,7 @@ context( 'Site Health', () => {
} );
// Include title in audio
cy.get( 'tr' )
- .eq( 7 )
+ .eq( 8 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -117,14 +124,14 @@ context( 'Site Health', () => {
} );
// Include excerpts in audio
cy.get( 'tr' )
- .eq( 8 )
+ .eq( 9 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Auto-publish audio' );
cy.get( 'td' ).should( 'have.text', 'Yes' );
} );
// Include excerpts in audio
cy.get( 'tr' )
- .eq( 9 )
+ .eq( 10 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -134,7 +141,7 @@ context( 'Site Health', () => {
} );
// Preselect ‘Generate audio’
cy.get( 'tr' )
- .eq( 10 )
+ .eq( 11 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -147,7 +154,7 @@ context( 'Site Health', () => {
} );
// Default language code
cy.get( 'tr' )
- .eq( 11 )
+ .eq( 12 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -157,21 +164,21 @@ context( 'Site Health', () => {
} );
// Default language ID
cy.get( 'tr' )
- .eq( 12 )
+ .eq( 13 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Default language ID' );
cy.get( 'td' ).should( 'have.text', '' );
} );
// Title voice ID
cy.get( 'tr' )
- .eq( 13 )
+ .eq( 14 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Title voice ID' );
cy.get( 'td' ).should( 'have.text', '2517' );
} );
// Title voice speaking rate
cy.get( 'tr' )
- .eq( 14 )
+ .eq( 15 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -181,14 +188,14 @@ context( 'Site Health', () => {
} );
// Body voice ID
cy.get( 'tr' )
- .eq( 15 )
+ .eq( 16 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Body voice ID' );
cy.get( 'td' ).should( 'have.text', '2517' );
} );
// Body voice speaking rate
cy.get( 'tr' )
- .eq( 16 )
+ .eq( 17 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -198,28 +205,28 @@ context( 'Site Health', () => {
} );
// Player UI
cy.get( 'tr' )
- .eq( 17 )
+ .eq( 18 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Player UI' );
cy.get( 'td' ).should( 'have.text', 'enabled' );
} );
// Player style
cy.get( 'tr' )
- .eq( 18 )
+ .eq( 19 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Player style' );
cy.get( 'td' ).should( 'have.text', 'standard' );
} );
// Player theme
cy.get( 'tr' )
- .eq( 19 )
+ .eq( 20 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Player theme' );
cy.get( 'td' ).should( 'have.text', 'light' );
} );
// Light theme
cy.get( 'tr' )
- .eq( 20 )
+ .eq( 21 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Light theme' );
cy.get( 'td' ).should(
@@ -230,7 +237,7 @@ context( 'Site Health', () => {
} );
// Dark theme
cy.get( 'tr' )
- .eq( 21 )
+ .eq( 22 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Dark theme' );
cy.get( 'td' ).should(
@@ -241,7 +248,7 @@ context( 'Site Health', () => {
} );
// Video theme
cy.get( 'tr' )
- .eq( 22 )
+ .eq( 23 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Video theme' );
cy.get( 'td' ).should(
@@ -252,7 +259,7 @@ context( 'Site Health', () => {
} );
// Call-to-action
cy.get( 'tr' )
- .eq( 23 )
+ .eq( 24 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Call-to-action' );
cy.get( 'td' ).should(
@@ -262,14 +269,14 @@ context( 'Site Health', () => {
} );
// Text highlighting
cy.get( 'tr' )
- .eq( 24 )
+ .eq( 25 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Text highlighting' );
cy.get( 'td' ).should( 'have.text', 'No' );
} );
// Playback from segments
cy.get( 'tr' )
- .eq( 25 )
+ .eq( 26 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -279,35 +286,35 @@ context( 'Site Health', () => {
} );
// Widget style
cy.get( 'tr' )
- .eq( 26 )
+ .eq( 27 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Widget style' );
cy.get( 'td' ).should( 'have.text', 'standard' );
} );
// Widget position
cy.get( 'tr' )
- .eq( 27 )
+ .eq( 28 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Widget position' );
cy.get( 'td' ).should( 'have.text', 'auto' );
} );
// Skip button style
cy.get( 'tr' )
- .eq( 28 )
+ .eq( 29 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Skip button style' );
cy.get( 'td' ).should( 'have.text', 'auto' );
} );
// Registered filters
cy.get( 'tr' )
- .eq( 29 )
+ .eq( 30 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Registered filters' );
cy.get( 'td' ).should( 'have.text', 'None' );
} );
// Registered deprecated filters
cy.get( 'tr' )
- .eq( 30 )
+ .eq( 31 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -317,7 +324,7 @@ context( 'Site Health', () => {
} );
// Review Notice Dismissed
cy.get( 'tr' )
- .eq( 31 )
+ .eq( 32 )
.within( () => {
cy.get( 'th' ).should( 'have.text', 'Date Activated' );
cy.get( 'td' ).should(
@@ -327,7 +334,7 @@ context( 'Site Health', () => {
} );
// Review Notice Dismissed
cy.get( 'tr' )
- .eq( 32 )
+ .eq( 33 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -337,7 +344,7 @@ context( 'Site Health', () => {
} );
// BEYONDWORDS_AUTO_SYNC_SETTINGS
cy.get( 'tr' )
- .eq( 33 )
+ .eq( 34 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
@@ -346,22 +353,12 @@ context( 'Site Health', () => {
cy.get( 'td' ).should( 'have.text', 'False' );
} );
// BEYONDWORDS_AUTOREGENERATE
- cy.get( 'tr' )
- .eq( 34 )
- .within( () => {
- cy.get( 'th' ).should(
- 'have.text',
- 'BEYONDWORDS_AUTOREGENERATE'
- );
- cy.get( 'td' ).should( 'have.text', 'Undefined' );
- } );
- // BEYONDWORDS_AUTOREGENERATE
cy.get( 'tr' )
.eq( 35 )
.within( () => {
cy.get( 'th' ).should(
'have.text',
- 'BEYONDWORDS_PLAYER_INLINE_SCRIPT_TAG'
+ 'BEYONDWORDS_AUTOREGENERATE'
);
cy.get( 'td' ).should( 'have.text', 'Undefined' );
} );
diff --git a/tests/cypress/support/commands.js b/tests/cypress/support/commands.js
index 781546d6..6a55810a 100644
--- a/tests/cypress/support/commands.js
+++ b/tests/cypress/support/commands.js
@@ -1,4 +1,4 @@
-/* global cy, Cypress, DataTransfer, ClipboardEvent */
+/* global cy, Cypress, DataTransfer, expect, ClipboardEvent */
// ***********************************************
// This example commands.js shows you how to
@@ -346,7 +346,7 @@ Cypress.Commands.add( 'publishPostWithAudio', ( options = {} ) => {
cy.publishWithConfirmation();
- cy.hasPlayerInstances( 1 );
+ cy.hasAdminPlayerInstances( 1 );
} );
Cypress.Commands.add( 'publishPostWithoutAudio', ( options = {} ) => {
@@ -360,7 +360,7 @@ Cypress.Commands.add( 'publishPostWithoutAudio', ( options = {} ) => {
cy.getBlockEditorCheckbox( 'Generate audio' ).should( 'exist' );
- cy.hasPlayerInstances( 0 );
+ cy.hasAdminPlayerInstances( 0 );
} );
/**
@@ -467,31 +467,68 @@ Cypress.Commands.add( 'getLabel', ( text, ...args ) => {
return cy.get( 'label', ...args ).contains( text );
} );
+// Check for a number of admin player instances.
+Cypress.Commands.add( 'hasAdminPlayerInstances', ( num = 1 ) => {
+ if ( num < 0 ) {
+ throw new Error( 'Number of player instances cannot be negative.' );
+ }
+
+ if ( num === 0 ) {
+ cy.get( '.beyondwords-player-box-wrapper' ).should( 'not.exist' );
+ return;
+ }
+
+ cy.get( '.beyondwords-player-box-wrapper' ).should( 'exist' );
+} );
+
// Check for a number of player instances.
-Cypress.Commands.add( 'hasPlayerInstances', ( num = 1 ) => {
- cy.window( { timeout: 10000 } ).should( ( win ) => {
- if ( ! win.BeyondWords ) {
- throw new Error(
- 'BeyondWords is not available on the window object.'
- );
- }
+Cypress.Commands.add( 'hasPlayerInstances', ( num = 1, params = {} ) => {
+ // Ensure the player script tag count matches the expected number of instances.
+ if ( num < 0 ) {
+ throw new Error( 'Number of player instances cannot be negative.' );
+ }
+
+ if ( num === 0 ) {
+ cy.getPlayerScriptTag().should( 'not.exist' );
+ return;
+ }
- if (
- ! win.BeyondWords.Player ||
- typeof win.BeyondWords.Player.instances !== 'function'
- ) {
+ cy.getPlayerScriptTag().should( 'have.length', num );
+
+ if ( _.isEmpty( params ) ) {
+ // eslint-disable-next-line no-useless-return
+ return;
+ }
+
+ // Check params exist in the params of the player script tag's onload init object.
+ cy.getPlayerScriptTag().each( ( $el ) => {
+ const onload = $el.attr( 'onload' );
+ const match = onload.match( /\{target:this, \.\.\.(.+)\}\)/ );
+ console.log( 'onload', onload );
+ console.log( 'match', match );
+
+ if ( ! match ) {
throw new Error(
- 'BeyondWords.Player.instances is not a function.'
+ 'Could not find params object in onload attribute.'
);
}
- const instances = win.BeyondWords.Player.instances();
+ const paramsStr = match[ 1 ];
- if ( instances.length !== num ) {
- throw new Error(
- `Expected ${ num } player instance(s), but found ${ instances.length }.`
- );
+ let paramsObj = JSON.parse( paramsStr );
+
+ // Parse double-encoded JSON strings again.
+ if ( typeof paramsObj === 'string' ) {
+ paramsObj = JSON.parse( paramsObj );
}
+
+ Object.entries( params ).forEach( ( [ key, value ] ) => {
+ if ( value === undefined ) {
+ expect( paramsObj ).to.not.have.property( key, value );
+ } else {
+ expect( paramsObj ).to.have.property( key ).that.eql( value );
+ }
+ } );
} );
} );
@@ -506,9 +543,13 @@ Cypress.Commands.add( 'hasNoBeyondwordsWindowObject', () => {
} );
} );
-// Get frontend audio player element (standard)
-Cypress.Commands.add( 'getEnqueuedPlayerScriptTag', ( ...args ) => {
- return cy.get( 'script[data-beyondwords-sdk]', ...args );
+// Get frontend audio player script tag.
+Cypress.Commands.add( 'getPlayerScriptTag', ( ...args ) => {
+ return cy.get(
+ // eslint-disable-next-line max-len
+ 'body script[async][defer][src="https://proxy.beyondwords.io/npm/@beyondwords/player@latest/dist/umd.js"]',
+ ...args
+ );
} );
/**
diff --git a/tests/fixtures/wp-content/plugins/beyondwords-filter-player-inline-script-tag.php b/tests/fixtures/wp-content/plugins/beyondwords-filter-player-inline-script-tag.php
deleted file mode 100644
index 0223cac8..00000000
--- a/tests/fixtures/wp-content/plugins/beyondwords-filter-player-inline-script-tag.php
+++ /dev/null
@@ -1,19 +0,0 @@
-
- * @since 3.0.0
- */
-
use Beyondwords\Wordpress\Component\Post\AddPlayer\AddPlayer;
class AddPlayerTest extends WP_UnitTestCase
diff --git a/tests/phpunit/Component/Post/BlockAttributes/BlockAttributesTest.php b/tests/phpunit/Component/Post/BlockAttributes/BlockAttributesTest.php
index 4401c562..5b61ba2c 100644
--- a/tests/phpunit/Component/Post/BlockAttributes/BlockAttributesTest.php
+++ b/tests/phpunit/Component/Post/BlockAttributes/BlockAttributesTest.php
@@ -191,7 +191,7 @@ public function registerMarkerAttributeProvider($args) {
*/
public function renderBlockWithUiDisabled()
{
- update_option('beyondwords_player_ui', PlayerUI::DISABLED);
+ update_option(PlayerUI::OPTION_NAME, PlayerUI::DISABLED);
$this->assertSame(
'Test
',
@@ -202,7 +202,7 @@ public function renderBlockWithUiDisabled()
])
);
- delete_option('beyondwords_player_ui');
+ delete_option(PlayerUI::OPTION_NAME);
}
/**
diff --git a/tests/phpunit/Component/Post/Metabox/MetaboxTest.php b/tests/phpunit/Component/Post/Metabox/MetaboxTest.php
index 4873a531..ee5de3da 100644
--- a/tests/phpunit/Component/Post/Metabox/MetaboxTest.php
+++ b/tests/phpunit/Component/Post/Metabox/MetaboxTest.php
@@ -102,7 +102,7 @@ public function renderMetaBoxContent($expectPlayer, $postArgs)
$this->assertCount(1, $crawler->filter('p#beyondwords-metabox-help'));
$this->assertCount(0, $crawler->filter('div#beyondwords-metabox-errors'));
- wp_delete_post($postId);
+ wp_delete_post($postId, true);
}
public function renderMetaBoxContentProvider()
diff --git a/tests/phpunit/Component/Post/Panel/Inspect/InspectTest.php b/tests/phpunit/Component/Post/Panel/Inspect/InspectTest.php
index ad4ade01..ad11fce9 100644
--- a/tests/phpunit/Component/Post/Panel/Inspect/InspectTest.php
+++ b/tests/phpunit/Component/Post/Panel/Inspect/InspectTest.php
@@ -65,7 +65,6 @@ public function renderMetaBoxContent()
'beyondwords_summary_voice_id' => '303',
'beyondwords_disabled' => '0',
'beyondwords_error_message' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
- 'publish_post_to_speechkit' => 'Value 1',
'speechkit_info' => ["foo" => ["bar" => "baz"]],
'speechkit_response' => 'Value 7',
'speechkit_retries' => '1',
diff --git a/tests/phpunit/Component/Posts/Column/ColumnTest.php b/tests/phpunit/Component/Posts/Column/ColumnTest.php
index 2d6819c1..b6cce5f8 100644
--- a/tests/phpunit/Component/Posts/Column/ColumnTest.php
+++ b/tests/phpunit/Component/Posts/Column/ColumnTest.php
@@ -64,11 +64,11 @@ public function testRenderColumnsContent(string $expect, array $postArgs)
{
$this->expectOutputString($expect);
- $post = self::factory()->post->create_and_get($postArgs);
+ $postId = self::factory()->post->create($postArgs);
- Column::renderColumnsContent('beyondwords', $post->ID);
+ Column::renderColumnsContent('beyondwords', $postId);
- wp_delete_post($post->ID, true);
+ wp_delete_post($postId, true);
}
public function renderColumnsContentProvider()
diff --git a/tests/phpunit/Core/ApiClientTest.php b/tests/phpunit/Core/ApiClientTest.php
index 0d038520..b2e382ed 100644
--- a/tests/phpunit/Core/ApiClientTest.php
+++ b/tests/phpunit/Core/ApiClientTest.php
@@ -155,7 +155,7 @@ public function batchDeleteAudio()
$this->assertEquals($deleted, array_values($postIds));
foreach ($deleted as $postId) {
- wp_delete_post($postId);
+ wp_delete_post($postId, true);
}
delete_option('beyondwords_api_key');
@@ -362,6 +362,7 @@ public function callApiWithoutAuthHeader()
unset($headers['X-Api-Key']);
$request->setHeaders($headers);
+
$response = ApiClient::callApi($request, $postId);
$this->assertSame(401, wp_remote_retrieve_response_code($response));
@@ -391,6 +392,7 @@ public function callApiWithEmptyAuthHeader()
$headers['X-Api-Key'] = 'AN INVALID API KEY';
$request->setHeaders($headers);
+
$response = ApiClient::callApi($request, $postId);
$this->assertSame(401, wp_remote_retrieve_response_code($response));
diff --git a/tests/phpunit/Core/CoreTest.php b/tests/phpunit/Core/CoreTest.php
index 961b576b..438a5e1b 100644
--- a/tests/phpunit/Core/CoreTest.php
+++ b/tests/phpunit/Core/CoreTest.php
@@ -30,7 +30,6 @@ public function init()
Core::init();
$this->assertEquals(1, has_action('enqueue_block_editor_assets', array(Core::class, 'enqueueBlockEditorAssets')));
- $this->assertEquals(10, has_action('init', array(Core::class, 'loadPluginTextdomain')));
$this->assertEquals(99, has_action('init', array(Core::class, 'registerMeta')));
$this->assertEquals(99, has_action('wp_after_insert_post', array(Core::class, 'onAddOrUpdatePost')));
$this->assertEquals(10, has_action('before_delete_post', array(Core::class, 'onDeletePost')));
@@ -76,6 +75,7 @@ public function metaContentIdAndMetaProjectIdWillUpdateAudio($response)
$postId = $this->factory->post->create([
'post_title' => 'CoreTest::metaContentIdAndMetaProjectIdWillUpdateAudio',
'meta_input' => [
+ 'beyondwords_generate_audio' => '1',
'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
'beyondwords_content_id' => BEYONDWORDS_TESTS_CONTENT_ID,
],
@@ -101,6 +101,7 @@ public function metaContentIdAndSettingsProjectIdWillUpdateAudio($response)
$postId = $this->factory->post->create([
'post_title' => 'CoreTest::metaContentIdAndSettingsProjectIdWillUpdateAudio',
'meta_input' => [
+ 'beyondwords_generate_audio' => '1',
'beyondwords_content_id' => BEYONDWORDS_TESTS_CONTENT_ID,
],
]);
@@ -240,6 +241,69 @@ public function revisionWillNotCreateAudio()
delete_option('beyondwords_project_id');
}
+ /**
+ * @test
+ * @group post-statuses
+ *
+ * @dataProvider shouldProcessPostStatusProvider
+ */
+ public function shouldProcessPostStatus($expect, $status)
+ {
+ update_option('beyondwords_api_key', BEYONDWORDS_TESTS_API_KEY);
+ update_option('beyondwords_project_id', BEYONDWORDS_TESTS_PROJECT_ID);
+
+ // Add 'my_custom_status' to the list of statuses we process
+ $filter = function($statuses) {
+ array_push($statuses, 'my_custom_status');
+ return array_unique($statuses);
+ };
+
+ add_filter('beyondwords_settings_post_statuses', $filter);
+
+ $this->assertEquals($expect, Core::shouldProcessPostStatus($status));
+
+ remove_filter('beyondwords_settings_post_statuses', $filter);
+
+ delete_option('beyondwords_api_key');
+ delete_option('beyondwords_project_id');
+ }
+
+ /**
+ *
+ */
+ public function shouldProcessPostStatusProvider() {
+ return [
+ 'draft' => [
+ 'expect' => false,
+ 'status' => 'draft'
+ ],
+ 'pending' => [
+ 'expect' => true,
+ 'status' => 'pending'
+ ],
+ 'publish' => [
+ 'expect' => true,
+ 'status' => 'publish'
+ ],
+ 'private' => [
+ 'expect' => true,
+ 'status' => 'private'
+ ],
+ 'future' => [
+ 'expect' => true,
+ 'status' => 'future'
+ ],
+ 'trash' => [
+ 'expect' => false,
+ 'status' => 'trash'
+ ],
+ 'my_custom_status' => [
+ 'expect' => true,
+ 'status' => 'my_custom_status'
+ ],
+ ];
+ }
+
/**
* @test
*
@@ -284,7 +348,7 @@ public function onDeletePost()
Core::onDeletePost($postId);
- wp_delete_post($postId);
+ wp_delete_post($postId, true);
$this->assertSame('', get_post_meta($postId, 'beyondwords_error_message', true));
$this->assertSame('', get_post_meta($postId, 'beyondwords_project_id', true));
@@ -480,7 +544,6 @@ public function registerMeta()
'beyondwords_podcast_id' => 'beyondwords_podcast_id',
'beyondwords_preview_token' => 'beyondwords_preview_token',
'beyondwords_project_id' => 'beyondwords_project_id',
- 'publish_post_to_speechkit' => 'publish_post_to_speechkit',
'speechkit_info' => 'speechkit_info',
'speechkit_response' => 'speechkit_response',
'speechkit_retries' => 'speechkit_retries',
@@ -513,9 +576,6 @@ public function registerMeta()
$this->assertArrayHasKey('beyondwords_project_id', $meta);
$this->assertSame('beyondwords_project_id', get_post_meta($postId, 'beyondwords_project_id', true));
- $this->assertArrayHasKey('publish_post_to_speechkit', $meta);
- $this->assertSame('publish_post_to_speechkit', get_post_meta($postId, 'publish_post_to_speechkit', true));
-
$this->assertArrayHasKey('speechkit_info', $meta);
$this->assertSame('speechkit_info', get_post_meta($postId, 'speechkit_info', true));
@@ -588,4 +648,73 @@ public function langCodes()
],
];
}
+
+ /**
+ * @test
+ * @group generateAudio
+ * @dataProvider shouldGenerateAudioForPostProvider
+ */
+ public function shouldGenerateAudioForPost($expect, $post_status, $meta_input) {
+ update_option('beyondwords_api_key', BEYONDWORDS_TESTS_API_KEY);
+ update_option('beyondwords_project_id', BEYONDWORDS_TESTS_PROJECT_ID);
+
+ $postId = self::factory()->post->create([
+ 'post_title' => 'CoreTest::shouldGenerateAudioForPost',
+ 'post_status' => $post_status,
+ 'meta_input' => $meta_input,
+ ]);
+
+ $this->assertSame($expect, Core::shouldGenerateAudioForPost($postId));
+
+ delete_option('beyondwords_api_key');
+ delete_option('beyondwords_project_id');
+
+ wp_delete_post($postId, true);
+ }
+
+ public function shouldGenerateAudioForPostProvider()
+ {
+ return [
+ 'no post meta' => [
+ 'expect' => false,
+ 'post_status' => 'publish',
+ 'meta_input' => [],
+ ],
+ 'beyondwords_generate_audio = ""' => [
+ 'expect' => false,
+ 'post_status' => 'publish',
+ 'meta_input' => [
+ 'beyondwords_generate_audio' => '',
+ ],
+ ],
+ 'beyondwords_generate_audio = 0' => [
+ 'expect' => false,
+ 'post_status' => 'publish',
+ 'meta_input' => [
+ 'beyondwords_generate_audio' => '0',
+ ],
+ ],
+ 'beyondwords_generate_audio = 1' => [
+ 'expect' => true,
+ 'post_status' => 'publish',
+ 'meta_input' => [
+ 'beyondwords_generate_audio' => '1',
+ ],
+ ],
+ 'draft' => [
+ 'expect' => false,
+ 'post_status' => 'draft',
+ 'meta_input' => [
+ 'beyondwords_generate_audio' => '1',
+ ],
+ ],
+ 'trash' => [
+ 'expect' => false,
+ 'post_status' => 'trash',
+ 'meta_input' => [
+ 'beyondwords_generate_audio' => '1',
+ ],
+ ],
+ ];
+ }
}
diff --git a/tests/phpunit/Core/CoreUtilsTest.php b/tests/phpunit/Core/CoreUtilsTest.php
index 307c23a3..9f30ac53 100644
--- a/tests/phpunit/Core/CoreUtilsTest.php
+++ b/tests/phpunit/Core/CoreUtilsTest.php
@@ -60,6 +60,7 @@ public function getPostMetaKeys()
$keys = [
// Current
'beyondwords_generate_audio',
+ 'beyondwords_integration_method',
'beyondwords_project_id',
'beyondwords_content_id',
'beyondwords_preview_token',
@@ -125,6 +126,7 @@ public function getPostMetaKeysAll()
$keys = [
// Current
'beyondwords_generate_audio',
+ 'beyondwords_integration_method',
'beyondwords_project_id',
'beyondwords_content_id',
'beyondwords_preview_token',
diff --git a/tests/phpunit/Core/Player/ConfigBuilderTest.php b/tests/phpunit/Core/Player/ConfigBuilderTest.php
new file mode 100644
index 00000000..4c828026
--- /dev/null
+++ b/tests/phpunit/Core/Player/ConfigBuilderTest.php
@@ -0,0 +1,102 @@
+markTestIncomplete('This test needs to be implemented.');
+ }
+
+ /**
+ * @test
+ */
+ public function mergePluginSettings()
+ {
+ $this->markTestIncomplete('This test needs to be implemented.');
+ }
+
+ /**
+ * @test
+ */
+ public function mergePostSettings()
+ {
+ $this->markTestIncomplete('This test needs to be implemented.');
+ }
+
+ // /**
+ // * @test
+ // */
+ // public function jsPlayerParams()
+ // {
+ // $post = self::factory()->post->create_and_get([
+ // 'post_title' => 'PlayerTest::jsPlayerParams',
+ // 'meta_input' => [
+ // 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ // 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ // ],
+ // ]);
+
+ // $params = Player::jsPlayerParams($post);
+
+ // $this->assertEquals($params->projectId, BEYONDWORDS_TESTS_PROJECT_ID);
+ // $this->assertEquals($params->contentId, BEYONDWORDS_TESTS_CONTENT_ID);
+ // $this->assertEquals($params->playerStyle, 'standard');
+
+ // $this->assertObjectNotHasProperty('playerType', $params);
+ // $this->assertObjectNotHasProperty('skBackend', $params);
+ // $this->assertObjectNotHasProperty('processingStatus', $params);
+ // $this->assertObjectNotHasProperty('apiWriteKey', $params);
+
+ // wp_delete_post($post->ID, true);
+ // }
+
+ // /**
+ // * @test
+ // */
+ // public function playerSdkParamsFilter()
+ // {
+ // $post = self::factory()->post->create_and_get([
+ // 'post_title' => 'PlayerTest::playerSdkParamsFilter',
+ // 'meta_input' => [
+ // 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ // 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ // ],
+ // ]);
+
+ // $filter = function($params) {
+ // $params['projectId'] = 4321;
+ // $params['contentId'] = 87654321;
+ // $params['playerStyle'] = 'screen';
+ // $params['playerContent'] = 'custom content value';
+ // $params['myCustomParam'] = 'my custom value';
+
+ // return $params;
+ // };
+
+ // add_filter('beyondwords_player_sdk_params', $filter, 10);
+
+ // $params = Player::jsPlayerParams($post);
+
+ // remove_filter('beyondwords_player_sdk_params', $filter, 10);
+
+ // $this->assertEquals($params->projectId, 4321);
+ // $this->assertEquals($params->contentId, 87654321);
+ // $this->assertEquals($params->playerStyle, 'screen');
+ // $this->assertEquals($params->playerContent, 'custom content value');
+ // $this->assertEquals($params->myCustomParam, 'my custom value');
+
+ // wp_delete_post($post->ID, true);
+ // }
+}
diff --git a/tests/phpunit/Core/Player/Renderer/AmpTest.php b/tests/phpunit/Core/Player/Renderer/AmpTest.php
new file mode 100644
index 00000000..2382322a
--- /dev/null
+++ b/tests/phpunit/Core/Player/Renderer/AmpTest.php
@@ -0,0 +1,79 @@
+post->create_and_get([
+ 'post_title' => 'Amp::check::1',
+ ]);
+
+ $this->assertFalse(Amp::check($post));
+
+ $post = self::factory()->post->create_and_get([
+ 'post_title' => 'Amp::check::2',
+ 'meta_input' => [
+ 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ ],
+ ]);
+
+ $this->markTestIncomplete('Needs updates for Amp renderer.');
+
+ $this->assertTrue(Amp::check($post));
+ }
+
+ /**
+ * @test
+ */
+ public function render() {
+
+ $post = self::factory()->post->create_and_get([
+ 'post_title' => 'AmpTest::render',
+ 'meta_input' => [
+ 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ ],
+ ]);
+
+ $src = "https://audio.beyondwords.io/amp/" . BEYONDWORDS_TESTS_PROJECT_ID . "?podcast_id=" . BEYONDWORDS_TESTS_CONTENT_ID;
+
+ $html = Amp::render($post);
+
+ $crawler = new Crawler($html);
+
+ //
+ $iframe = $crawler->filter('amp-iframe');
+ $this->assertCount(1, $iframe);
+ $this->assertSame('0', $iframe->attr('frameborder'));
+ $this->assertSame('43', $iframe->attr('height'));
+ $this->assertSame('responsive', $iframe->attr('layout'));
+ $this->assertSame('allow-scripts allow-same-origin allow-popups', $iframe->attr('sandbox'));
+ $this->assertSame('no', $iframe->attr('scrolling'));
+ $this->assertSame($src, $iframe->attr('src'));
+ $this->assertSame('295', $iframe->attr('width'));
+
+ //
+ $img = $iframe->filter('amp-img');
+ $this->assertCount(1, $img);
+ $this->assertSame('150', $img->attr('height'));
+ $this->assertSame('responsive', $img->attr('layout'));
+ $this->assertSame('', $img->attr('placeholder'));
+ $this->assertSame(Environment::getAmpImgUrl(), $img->attr('src'));
+ $this->assertSame('643', $img->attr('width'));
+
+ wp_delete_post($post->ID, true);
+ }
+}
\ No newline at end of file
diff --git a/tests/phpunit/Core/Player/Renderer/JavascriptTest.php b/tests/phpunit/Core/Player/Renderer/JavascriptTest.php
new file mode 100644
index 00000000..ffd69e40
--- /dev/null
+++ b/tests/phpunit/Core/Player/Renderer/JavascriptTest.php
@@ -0,0 +1,107 @@
+post->create_and_get([
+ 'post_title' => 'Javascript::check::1',
+ ]);
+
+ $this->assertFalse(Javascript::check($post));
+
+ $post = self::factory()->post->create_and_get([
+ 'post_title' => 'Javascript::check::2',
+ 'meta_input' => [
+ 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ ],
+ ]);
+
+ $this->markTestIncomplete('Needs updates for JavaScript renderer.');
+
+ $this->assertTrue(Javascript::check($post));
+ }
+
+ /**
+ * @test
+ */
+ public function render()
+ {
+ $post = self::factory()->post->create_and_get([
+ 'post_title' => 'JavascriptTest::render',
+ 'meta_input' => [
+ 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ ],
+ ]);
+
+ $html = Javascript::render($post);
+
+ $this->assertNotEmpty($html);
+
+ setup_postdata($post);
+
+ $crawler = new Crawler($html);
+
+ $this->assertCount(1, $crawler->filter('div[data-beyondwords-player="true"][contenteditable="false"]'));
+
+ wp_reset_postdata();
+
+ wp_delete_post($post->ID, true);
+ }
+
+ /**
+ * @test
+ */
+ public function renderWithFilter()
+ {
+ $post = self::factory()->post->create_and_get([
+ 'post_title' => 'JavascriptTest::renderWithFilter',
+ 'meta_input' => [
+ 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
+ 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
+ ],
+ ]);
+
+ $filter = function($html, $postId, $projectId, $contentId) {
+ return sprintf(
+ '%s
',
+ $postId,
+ $projectId,
+ $contentId,
+ $html
+ );
+ };
+
+ add_filter('beyondwords_player_html', $filter, 10, 4);
+
+ $html = Javascript::render($post);
+
+ remove_filter('beyondwords_player_html', $filter, 10, 4);
+
+ $crawler = new Crawler($html);
+
+ //
+ $wrapper = $crawler->filter('#wrapper');
+ $this->assertCount(1, $wrapper);
+ $this->assertSame("$post->ID", $wrapper->attr('data-post-id'));
+ $this->assertSame(BEYONDWORDS_TESTS_PROJECT_ID, $wrapper->attr('data-project-id'));
+ $this->assertSame(BEYONDWORDS_TESTS_CONTENT_ID, $wrapper->attr('data-podcast-id'));
+
+ $this->assertCount(1, $wrapper->filter('div[data-beyondwords-player="true"][contenteditable="false"]'));
+
+ wp_delete_post($post->ID, true);
+ }
+}
diff --git a/tests/phpunit/Core/PlayerTest.php b/tests/phpunit/Core/PlayerTest.php
index cd84fd1c..9d329c54 100644
--- a/tests/phpunit/Core/PlayerTest.php
+++ b/tests/phpunit/Core/PlayerTest.php
@@ -2,35 +2,16 @@
declare(strict_types=1);
-use Beyondwords\Wordpress\Core\Environment;
+use Beyondwords\Wordpress\Component\Settings\Fields\PlayerUI\PlayerUI;
use Beyondwords\Wordpress\Core\Player\Player;
-use \Symfony\Component\DomCrawler\Crawler;
class PlayerTest extends WP_UnitTestCase
{
- /**
- * @var \Beyondwords\Wordpress\Core\Player\Player
- */
- private $_instance;
-
- public function setUp(): void
- {
- // Before...
- parent::setUp();
-
- // Your set up methods here.
- }
-
- public function tearDown(): void
- {
- // Your tear down methods here.
-
- // Then...
- parent::tearDown();
- }
+ public const PLAYER_HTML = '';
/**
* @test
+ * @group player
*/
public function init()
{
@@ -40,7 +21,6 @@ public function init()
// Actions
$this->assertEquals(10, has_action('init', array(Player::class, 'registerShortcodes')));
- $this->assertEquals(10, has_action('wp_enqueue_scripts', array(Player::class, 'enqueueScripts')));
// Filters
$this->assertEquals(1000000, has_filter('the_content', array(Player::class, 'autoPrependPlayer')));
@@ -49,6 +29,7 @@ public function init()
/**
* @test
+ * @group player
*/
public function addShortcode()
{
@@ -69,7 +50,7 @@ public function addShortcode()
\the_content();
$content = trim(ob_get_clean());
- $this->assertSame("
Before
\n
\n
After
", $content);
+ $this->assertSame("
Before
\n" . self::PLAYER_HTML . "\n
After
", $content);
wp_reset_postdata();
@@ -78,6 +59,7 @@ public function addShortcode()
/**
* @test
+ * @group player
*/
public function autoPrependPlayer()
{
@@ -105,7 +87,7 @@ public function autoPrependPlayer()
$output = Player::autoPrependPlayer($content);
// We are now is_singular() so player should be prepended
- $this->assertSame('
' . $content, $output);
+ $this->assertSame(self::PLAYER_HTML . $content, $output);
wp_reset_postdata();
@@ -114,357 +96,125 @@ public function autoPrependPlayer()
/**
* @test
+ * @group player
*/
- public function jsPlayerHtml()
+ public function replaceLegacyCustomPlayer()
{
- $postId = self::factory()->post->create([
- 'post_title' => 'PlayerTest::jsPlayerHtml',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ]);
-
- $html = Player::jsPlayerHtml($postId, BEYONDWORDS_TESTS_PROJECT_ID, BEYONDWORDS_TESTS_CONTENT_ID);
-
- $this->assertNotEmpty($html);
-
- setup_postdata($postId);
-
- $crawler = new Crawler($html);
-
- $this->assertCount(1, $crawler->filter('div[data-beyondwords-player="true"][contenteditable="false"]'));
-
- wp_reset_postdata();
+ global $post;
- wp_delete_post($postId, true);
- }
+ $content = "
Before
\n
\n
After
";
- /**
- * @test
- */
- public function playerHtmlFilter()
- {
$post = self::factory()->post->create_and_get([
- 'post_title' => 'PlayerTest::playerHtmlFilter',
+ 'post_title' => 'PlayerTest::autoPrependPlayer',
+ 'post_content' => $content,
'meta_input' => [
'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
],
]);
- $filter = function($html, $postId, $projectId, $contentId) {
- return sprintf(
- '
%s
',
- $postId,
- $projectId,
- $contentId,
- $html
- );
- };
+ setup_postdata($post);
- add_filter('beyondwords_player_html', $filter, 10, 4);
+ $output = Player::replaceLegacyCustomPlayer($content);
- $html = Player::playerHtml($post);
+ // Replacement only happens when is_singular()
+ $this->assertSame($content, $output);
- remove_filter('beyondwords_player_html', $filter, 10, 4);
+ $this->go_to("/?p={$post->ID}");
- $crawler = new Crawler($html);
+ $output = Player::replaceLegacyCustomPlayer($content);
- //
- $wrapper = $crawler->filter('#wrapper');
- $this->assertCount(1, $wrapper);
- $this->assertSame("$post->ID", $wrapper->attr('data-post-id'));
- $this->assertSame(BEYONDWORDS_TESTS_PROJECT_ID, $wrapper->attr('data-project-id'));
- $this->assertSame(BEYONDWORDS_TESTS_CONTENT_ID, $wrapper->attr('data-podcast-id'));
+ // We are now is_singular() so player div should be replaced with player shortcode
+ $this->assertSame("
Before
\n[beyondwords_player]\n
After
", $output);
- $this->assertCount(1, $wrapper->filter('div[data-beyondwords-player="true"][contenteditable="false"]'));
+ wp_reset_postdata();
wp_delete_post($post->ID, true);
}
/**
* @test
+ * @group player
*/
- public function ampPlayerHtml() {
-
- $postId = self::factory()->post->create([
- 'post_title' => 'PlayerTest::ampPlayerHtml',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ]);
-
- $src = "https://audio.beyondwords.io/amp/" . BEYONDWORDS_TESTS_PROJECT_ID . "?podcast_id=" . BEYONDWORDS_TESTS_CONTENT_ID;
-
- $html = Player::ampPlayerHtml($postId, BEYONDWORDS_TESTS_PROJECT_ID, BEYONDWORDS_TESTS_CONTENT_ID);
-
- $crawler = new Crawler($html);
-
- //
- $iframe = $crawler->filter('amp-iframe');
- $this->assertCount(1, $iframe);
- $this->assertSame('0', $iframe->attr('frameborder'));
- $this->assertSame('43', $iframe->attr('height'));
- $this->assertSame('responsive', $iframe->attr('layout'));
- $this->assertSame('allow-scripts allow-same-origin allow-popups', $iframe->attr('sandbox'));
- $this->assertSame('no', $iframe->attr('scrolling'));
- $this->assertSame($src, $iframe->attr('src'));
- $this->assertSame('295', $iframe->attr('width'));
-
- //
- $img = $iframe->filter('amp-img');
- $this->assertCount(1, $img);
- $this->assertSame('150', $img->attr('height'));
- $this->assertSame('responsive', $img->attr('layout'));
- $this->assertSame('', $img->attr('placeholder'));
- $this->assertSame(Environment::getAmpImgUrl(), $img->attr('src'));
- $this->assertSame('643', $img->attr('width'));
-
- wp_delete_post($postId, true);
- }
-
- /**
- * @test
- */
- public function isPlayerEnabled()
+ public function renderPlayer()
{
- $post = self::factory()->post->create_and_get([
- 'post_title' => 'PlayerTest::isPlayerEnabled',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ]);
-
- $this->assertFalse(Player::isPlayerEnabled());
- $this->assertFalse(Player::isPlayerEnabled(0));
- $this->assertFalse(Player::isPlayerEnabled(false));
-
- $this->assertTrue(Player::isPlayerEnabled($post));
- $this->assertTrue(Player::isPlayerEnabled($post->ID));
+ global $post;
- update_post_meta($post->ID, 'beyondwords_disabled', 1);
+ // Case 1: No post set, should return empty string
+ $this->assertSame('', Player::renderPlayer());
- $this->assertFalse(Player::isPlayerEnabled($post->ID));
+ // Case 2: Post is not a WP_Post instance, should return empty string
+ $post = null;
+ $this->assertSame('', Player::renderPlayer());
- wp_delete_post($post->ID, true);
- }
-
- /**
- * @test
- */
- public function jsPlayerParams()
- {
+ // Case 3: Post exists but player is disabled via option
$post = self::factory()->post->create_and_get([
- 'post_title' => 'PlayerTest::jsPlayerParams',
+ 'post_title' => 'PlayerTest::renderPlayer',
'meta_input' => [
'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
],
]);
+ update_option(PlayerUI::OPTION_NAME, PlayerUI::DISABLED);
+ setup_postdata($post);
+ $this->assertSame('', Player::renderPlayer());
- $params = Player::jsPlayerParams($post);
-
- $this->assertEquals($params->projectId, BEYONDWORDS_TESTS_PROJECT_ID);
- $this->assertEquals($params->contentId, BEYONDWORDS_TESTS_CONTENT_ID);
- $this->assertEquals($params->playerStyle, 'standard');
+ // Case 4: Post exists but player is disabled via post meta
+ update_option(PlayerUI::OPTION_NAME, PlayerUI::ENABLED);
+ update_post_meta($post->ID, 'beyondwords_disabled', '1');
+ $this->assertSame('', Player::renderPlayer());
- $this->assertObjectNotHasProperty('playerType', $params);
- $this->assertObjectNotHasProperty('skBackend', $params);
- $this->assertObjectNotHasProperty('processingStatus', $params);
- $this->assertObjectNotHasProperty('apiWriteKey', $params);
+ // Case 5: Post exists, player enabled, should render player HTML
+ delete_post_meta($post->ID, 'beyondwords_disabled');
+ $this->assertSame(self::PLAYER_HTML, Player::renderPlayer());
+ wp_reset_postdata();
wp_delete_post($post->ID, true);
}
/**
* @test
+ * @group player
*/
- public function playerSdkParamsFilter()
+ public function isEnabled()
{
- $post = self::factory()->post->create_and_get([
- 'post_title' => 'PlayerTest::playerSdkParamsFilter',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ]);
+ update_option(PlayerUI::OPTION_NAME, PlayerUI::DISABLED);
- $filter = function($params) {
- $params['projectId'] = 4321;
- $params['contentId'] = 87654321;
- $params['playerStyle'] = 'screen';
- $params['playerContent'] = 'custom content value';
- $params['myCustomParam'] = 'my custom value';
+ $post = self::factory()->post->create_and_get();
- return $params;
- };
+ $this->assertFalse(Player::isEnabled($post));
- add_filter('beyondwords_player_sdk_params', $filter, 10);
+ delete_option(PlayerUI::OPTION_NAME);
- $params = Player::jsPlayerParams($post);
+ $this->assertTrue(Player::isEnabled($post));
- remove_filter('beyondwords_player_sdk_params', $filter, 10);
+ update_post_meta($post->ID, 'beyondwords_disabled', '1');
- $this->assertEquals($params->projectId, 4321);
- $this->assertEquals($params->contentId, 87654321);
- $this->assertEquals($params->playerStyle, 'screen');
- $this->assertEquals($params->playerContent, 'custom content value');
- $this->assertEquals($params->myCustomParam, 'my custom value');
+ $this->assertFalse(Player::isEnabled($post));
wp_delete_post($post->ID, true);
}
- /**
- * @test
- */
- public function enqueueScripts()
- {
- global $wp_scripts;
-
- $postId = self::factory()->post->create([
- 'post_title' => 'PlayerTest::enqueueScripts',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ]);
-
- $this->assertNull($wp_scripts);
-
- $this->go_to("/");
- Player::enqueueScripts( 'front.php' );
- $this->assertNull($wp_scripts);
-
- $this->go_to("/wp-admin/options.php");
- Player::enqueueScripts( 'options.php' );
- $this->assertNull($wp_scripts);
-
- $this->go_to("/wp-admin/post.php");
- Player::enqueueScripts( 'post.php' );
- $this->assertNull($wp_scripts);
-
- $this->go_to("/wp-admin/post-new.php");
- Player::enqueueScripts( 'post-new.php' );
- $this->assertNull($wp_scripts);
-
- $this->go_to("/?p={$postId}");
- Player::enqueueScripts( 'single.php' );
- $this->assertContains('beyondwords-sdk', $wp_scripts->queue);
-
- $wp_scripts = null;
-
- }
/**
* @test
- * @dataProvider scriptLoaderTagProvider
+ * @group player
+ *
+ * @dataProvider contentProvider
*/
- public function scriptLoaderTag($postArgs, $tag, $handle, $src, $expect)
+ public function hasCustomPlayer($expect, $content)
{
- global $post;
-
- set_current_screen('/wp-admin/front');
-
- $post = self::factory()->post->create_and_get($postArgs);
-
- setup_postdata($post);
-
- $output = Player::scriptLoaderTag($tag, $handle, $src);
- $output = trim($output);
-
- // Trim new lines and whitespace
- $output = trim(preg_replace('/\s\s+/', ' ', $output));
-
- $this->assertEquals($expect, $output);
-
- wp_reset_postdata();
-
- wp_delete_post($post->ID, true);
+ $this->assertEquals($expect, Player::hasCustomPlayer($content));
}
- public function scriptLoaderTagProvider()
+ public function contentProvider()
{
- $tag = '';
- $handle = 'beyondwords-sdk';
- $src = 'https://proxy.beyondwords.io/npm/@beyondwords/beyondwords-audio-player-v2@latest/dist/module/index.js';
-
- $playerScript = '';
-
return [
- 'invalid handle' => [
- 'postArgs' => [
- 'post_title' => 'PlayerTest::scriptLoaderTag::1',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ],
- 'tag' => $tag,
- 'handle' => 'an-invalid-handle',
- 'src' => $src,
- 'expect' => $tag,
- ],
- 'no post' => [
- 'postArgs' => null,
- 'tag' => $tag,
- 'handle' => $handle,
- 'src' => $src,
- 'expect' => '',
- ],
- 'No Content ID' => [
- 'postArgs' => [
- 'post_title' => 'PlayerTest::scriptLoaderTag::2',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- ],
- ],
- 'tag' => $tag,
- 'handle' => $handle,
- 'src' => $src,
- 'expect' => '',
- ],
- 'No Project ID' => [
- 'postArgs' => [
- 'post_title' => 'PlayerTest::scriptLoaderTag::3',
- 'meta_input' => [
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ],
- 'tag' => $tag,
- 'handle' => $handle,
- 'src' => $src,
- 'expect' => '',
- ],
- 'Post with everything we need' => [
- 'postArgs' => [
- 'post_title' => 'PlayerTest::scriptLoaderTag::4',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ],
- 'tag' => $tag,
- 'handle' => $handle,
- 'src' => $src,
- 'expect' => $playerScript,
- ],
- 'Page with everything we need' => [
- 'postArgs' => [
- 'post_title' => 'PlayerTest::scriptLoaderTag::5',
- 'post_type' => 'page',
- 'meta_input' => [
- 'beyondwords_project_id' => BEYONDWORDS_TESTS_PROJECT_ID,
- 'beyondwords_podcast_id' => BEYONDWORDS_TESTS_CONTENT_ID,
- ],
- ],
- 'tag' => $tag,
- 'handle' => $handle,
- 'src' => $src,
- 'expect' => $playerScript,
- ],
+ 'No player' => [false, 'No player.
'],
+ 'Legacy player' => [true, 'Before.
After.
'],
+ 'Legacy player with contenteditable attribute' => [true, 'Before.
After.
'],
+ 'New player shortcode' => [true, 'Before.
[beyondwords_player]After.
'],
+ 'New player shortcode with project_id attribute' => [true, 'Before.
[beyondwords_player project_id="1234"]After.
'],
];
}
}
diff --git a/tests/phpunit/Core/UninstallerTest.php b/tests/phpunit/Core/UninstallerTest.php
index f0de4384..97756529 100644
--- a/tests/phpunit/Core/UninstallerTest.php
+++ b/tests/phpunit/Core/UninstallerTest.php
@@ -42,6 +42,8 @@ public function cleanupPluginOptions($name)
public function optionNamesProvider()
{
return [
+ // v6.0 Client-side integration
+ 'beyondwords_integration_method' => ['beyondwords_integration_method'],
// v5.3 player content (loadContentAs)
'beyondwords_player_content' => ['beyondwords_player_content'],
// v5.0 player settings
@@ -106,6 +108,8 @@ public function cleanupCustomFields()
$numPosts = 10;
$customFields = [
+ // v6.0 Client-side integration
+ 'beyondwords_integration_method' => 'beyondwords_integration_method',
// v4.x New API
'beyondwords_content_id' => 'beyondwords_content_id',
'beyondwords_language_id' => 'beyondwords_language_id',
@@ -164,7 +168,7 @@ public function cleanupCustomFields()
$this->assertEquals('foo', get_post_meta($postId, 'beyondwords_prefixed_field', true));
$this->assertEquals('bar', get_post_meta($postId, 'another_custom_field', true));
- wp_delete_post($postId);
+ wp_delete_post($postId, true);
}
}
}
diff --git a/tests/phpunit/Settings/Fields/PlayerUI/PlayerUITest.php b/tests/phpunit/Settings/Fields/PlayerUI/PlayerUITest.php
index 390dee33..878c78f0 100644
--- a/tests/phpunit/Settings/Fields/PlayerUI/PlayerUITest.php
+++ b/tests/phpunit/Settings/Fields/PlayerUI/PlayerUITest.php
@@ -85,11 +85,13 @@ public function render()
$this->assertCount(3, $field->filter('option'));
- $this->assertSame('enabled', $field->filter('option:nth-child(1)')->attr('value'));
+ $this->assertSame(PlayerUI::ENABLED, $field->filter('option:nth-child(1)')->attr('value'));
$this->assertSame('Enabled', $field->filter('option:nth-child(1)')->text());
- $this->assertSame('headless', $field->filter('option:nth-child(2)')->attr('value'));
+
+ $this->assertSame(PlayerUI::HEADLESS, $field->filter('option:nth-child(2)')->attr('value'));
$this->assertSame('Headless', $field->filter('option:nth-child(2)')->text());
- $this->assertSame('disabled', $field->filter('option:nth-child(3)')->attr('value'));
+
+ $this->assertSame(PlayerUI::DISABLED, $field->filter('option:nth-child(3)')->attr('value'));
$this->assertSame('Disabled', $field->filter('option:nth-child(3)')->text());
}
}
diff --git a/yarn.lock b/yarn.lock
index 0359c2d8..d78adb49 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -56,7 +56,7 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz"
integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
-"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.8.0", "@babel/core@>=7", "@babel/core@7.25.7":
+"@babel/core@7.25.7":
version "7.25.7"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz"
integrity sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==
@@ -77,70 +77,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/core@^7.11.6":
- version "7.26.9"
- resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz"
- integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.26.2"
- "@babel/generator" "^7.26.9"
- "@babel/helper-compilation-targets" "^7.26.5"
- "@babel/helper-module-transforms" "^7.26.0"
- "@babel/helpers" "^7.26.9"
- "@babel/parser" "^7.26.9"
- "@babel/template" "^7.26.9"
- "@babel/traverse" "^7.26.9"
- "@babel/types" "^7.26.9"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/core@^7.12.3":
- version "7.26.9"
- resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz"
- integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.26.2"
- "@babel/generator" "^7.26.9"
- "@babel/helper-compilation-targets" "^7.26.5"
- "@babel/helper-module-transforms" "^7.26.0"
- "@babel/helpers" "^7.26.9"
- "@babel/parser" "^7.26.9"
- "@babel/template" "^7.26.9"
- "@babel/traverse" "^7.26.9"
- "@babel/types" "^7.26.9"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/core@^7.21.3":
- version "7.26.9"
- resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz"
- integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.26.2"
- "@babel/generator" "^7.26.9"
- "@babel/helper-compilation-targets" "^7.26.5"
- "@babel/helper-module-transforms" "^7.26.0"
- "@babel/helpers" "^7.26.9"
- "@babel/parser" "^7.26.9"
- "@babel/template" "^7.26.9"
- "@babel/traverse" "^7.26.9"
- "@babel/types" "^7.26.9"
- convert-source-map "^2.0.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/core@^7.23.9":
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.21.3", "@babel/core@^7.23.9":
version "7.26.9"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz"
integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==
@@ -844,17 +781,6 @@
dependencies:
"@babel/plugin-transform-react-jsx" "^7.25.9"
-"@babel/plugin-transform-react-jsx@^7.25.9":
- version "7.25.9"
- resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz"
- integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.9"
- "@babel/helper-module-imports" "^7.25.9"
- "@babel/helper-plugin-utils" "^7.25.9"
- "@babel/plugin-syntax-jsx" "^7.25.9"
- "@babel/types" "^7.25.9"
-
"@babel/plugin-transform-react-jsx@7.25.7":
version "7.25.7"
resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz"
@@ -866,6 +792,17 @@
"@babel/plugin-syntax-jsx" "^7.25.7"
"@babel/types" "^7.25.7"
+"@babel/plugin-transform-react-jsx@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz"
+ integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/plugin-syntax-jsx" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
"@babel/plugin-transform-react-pure-annotations@^7.25.9":
version "7.25.9"
resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz"
@@ -987,81 +924,6 @@
"@babel/helper-create-regexp-features-plugin" "^7.25.9"
"@babel/helper-plugin-utils" "^7.25.9"
-"@babel/preset-env@^7.20.2":
- version "7.26.9"
- resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz"
- integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==
- dependencies:
- "@babel/compat-data" "^7.26.8"
- "@babel/helper-compilation-targets" "^7.26.5"
- "@babel/helper-plugin-utils" "^7.26.5"
- "@babel/helper-validator-option" "^7.25.9"
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9"
- "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9"
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9"
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9"
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9"
- "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
- "@babel/plugin-syntax-import-assertions" "^7.26.0"
- "@babel/plugin-syntax-import-attributes" "^7.26.0"
- "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
- "@babel/plugin-transform-arrow-functions" "^7.25.9"
- "@babel/plugin-transform-async-generator-functions" "^7.26.8"
- "@babel/plugin-transform-async-to-generator" "^7.25.9"
- "@babel/plugin-transform-block-scoped-functions" "^7.26.5"
- "@babel/plugin-transform-block-scoping" "^7.25.9"
- "@babel/plugin-transform-class-properties" "^7.25.9"
- "@babel/plugin-transform-class-static-block" "^7.26.0"
- "@babel/plugin-transform-classes" "^7.25.9"
- "@babel/plugin-transform-computed-properties" "^7.25.9"
- "@babel/plugin-transform-destructuring" "^7.25.9"
- "@babel/plugin-transform-dotall-regex" "^7.25.9"
- "@babel/plugin-transform-duplicate-keys" "^7.25.9"
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9"
- "@babel/plugin-transform-dynamic-import" "^7.25.9"
- "@babel/plugin-transform-exponentiation-operator" "^7.26.3"
- "@babel/plugin-transform-export-namespace-from" "^7.25.9"
- "@babel/plugin-transform-for-of" "^7.26.9"
- "@babel/plugin-transform-function-name" "^7.25.9"
- "@babel/plugin-transform-json-strings" "^7.25.9"
- "@babel/plugin-transform-literals" "^7.25.9"
- "@babel/plugin-transform-logical-assignment-operators" "^7.25.9"
- "@babel/plugin-transform-member-expression-literals" "^7.25.9"
- "@babel/plugin-transform-modules-amd" "^7.25.9"
- "@babel/plugin-transform-modules-commonjs" "^7.26.3"
- "@babel/plugin-transform-modules-systemjs" "^7.25.9"
- "@babel/plugin-transform-modules-umd" "^7.25.9"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9"
- "@babel/plugin-transform-new-target" "^7.25.9"
- "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6"
- "@babel/plugin-transform-numeric-separator" "^7.25.9"
- "@babel/plugin-transform-object-rest-spread" "^7.25.9"
- "@babel/plugin-transform-object-super" "^7.25.9"
- "@babel/plugin-transform-optional-catch-binding" "^7.25.9"
- "@babel/plugin-transform-optional-chaining" "^7.25.9"
- "@babel/plugin-transform-parameters" "^7.25.9"
- "@babel/plugin-transform-private-methods" "^7.25.9"
- "@babel/plugin-transform-private-property-in-object" "^7.25.9"
- "@babel/plugin-transform-property-literals" "^7.25.9"
- "@babel/plugin-transform-regenerator" "^7.25.9"
- "@babel/plugin-transform-regexp-modifiers" "^7.26.0"
- "@babel/plugin-transform-reserved-words" "^7.25.9"
- "@babel/plugin-transform-shorthand-properties" "^7.25.9"
- "@babel/plugin-transform-spread" "^7.25.9"
- "@babel/plugin-transform-sticky-regex" "^7.25.9"
- "@babel/plugin-transform-template-literals" "^7.26.8"
- "@babel/plugin-transform-typeof-symbol" "^7.26.7"
- "@babel/plugin-transform-unicode-escapes" "^7.25.9"
- "@babel/plugin-transform-unicode-property-regex" "^7.25.9"
- "@babel/plugin-transform-unicode-regex" "^7.25.9"
- "@babel/plugin-transform-unicode-sets-regex" "^7.25.9"
- "@babel/preset-modules" "0.1.6-no-external-plugins"
- babel-plugin-polyfill-corejs2 "^0.4.10"
- babel-plugin-polyfill-corejs3 "^0.11.0"
- babel-plugin-polyfill-regenerator "^0.6.1"
- core-js-compat "^3.40.0"
- semver "^6.3.1"
-
"@babel/preset-env@7.25.7":
version "7.25.7"
resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz"
@@ -1151,6 +1013,81 @@
core-js-compat "^3.38.1"
semver "^6.3.1"
+"@babel/preset-env@^7.20.2":
+ version "7.26.9"
+ resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz"
+ integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==
+ dependencies:
+ "@babel/compat-data" "^7.26.8"
+ "@babel/helper-compilation-targets" "^7.26.5"
+ "@babel/helper-plugin-utils" "^7.26.5"
+ "@babel/helper-validator-option" "^7.25.9"
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9"
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9"
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9"
+ "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
+ "@babel/plugin-syntax-import-assertions" "^7.26.0"
+ "@babel/plugin-syntax-import-attributes" "^7.26.0"
+ "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+ "@babel/plugin-transform-arrow-functions" "^7.25.9"
+ "@babel/plugin-transform-async-generator-functions" "^7.26.8"
+ "@babel/plugin-transform-async-to-generator" "^7.25.9"
+ "@babel/plugin-transform-block-scoped-functions" "^7.26.5"
+ "@babel/plugin-transform-block-scoping" "^7.25.9"
+ "@babel/plugin-transform-class-properties" "^7.25.9"
+ "@babel/plugin-transform-class-static-block" "^7.26.0"
+ "@babel/plugin-transform-classes" "^7.25.9"
+ "@babel/plugin-transform-computed-properties" "^7.25.9"
+ "@babel/plugin-transform-destructuring" "^7.25.9"
+ "@babel/plugin-transform-dotall-regex" "^7.25.9"
+ "@babel/plugin-transform-duplicate-keys" "^7.25.9"
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9"
+ "@babel/plugin-transform-dynamic-import" "^7.25.9"
+ "@babel/plugin-transform-exponentiation-operator" "^7.26.3"
+ "@babel/plugin-transform-export-namespace-from" "^7.25.9"
+ "@babel/plugin-transform-for-of" "^7.26.9"
+ "@babel/plugin-transform-function-name" "^7.25.9"
+ "@babel/plugin-transform-json-strings" "^7.25.9"
+ "@babel/plugin-transform-literals" "^7.25.9"
+ "@babel/plugin-transform-logical-assignment-operators" "^7.25.9"
+ "@babel/plugin-transform-member-expression-literals" "^7.25.9"
+ "@babel/plugin-transform-modules-amd" "^7.25.9"
+ "@babel/plugin-transform-modules-commonjs" "^7.26.3"
+ "@babel/plugin-transform-modules-systemjs" "^7.25.9"
+ "@babel/plugin-transform-modules-umd" "^7.25.9"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9"
+ "@babel/plugin-transform-new-target" "^7.25.9"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6"
+ "@babel/plugin-transform-numeric-separator" "^7.25.9"
+ "@babel/plugin-transform-object-rest-spread" "^7.25.9"
+ "@babel/plugin-transform-object-super" "^7.25.9"
+ "@babel/plugin-transform-optional-catch-binding" "^7.25.9"
+ "@babel/plugin-transform-optional-chaining" "^7.25.9"
+ "@babel/plugin-transform-parameters" "^7.25.9"
+ "@babel/plugin-transform-private-methods" "^7.25.9"
+ "@babel/plugin-transform-private-property-in-object" "^7.25.9"
+ "@babel/plugin-transform-property-literals" "^7.25.9"
+ "@babel/plugin-transform-regenerator" "^7.25.9"
+ "@babel/plugin-transform-regexp-modifiers" "^7.26.0"
+ "@babel/plugin-transform-reserved-words" "^7.25.9"
+ "@babel/plugin-transform-shorthand-properties" "^7.25.9"
+ "@babel/plugin-transform-spread" "^7.25.9"
+ "@babel/plugin-transform-sticky-regex" "^7.25.9"
+ "@babel/plugin-transform-template-literals" "^7.26.8"
+ "@babel/plugin-transform-typeof-symbol" "^7.26.7"
+ "@babel/plugin-transform-unicode-escapes" "^7.25.9"
+ "@babel/plugin-transform-unicode-property-regex" "^7.25.9"
+ "@babel/plugin-transform-unicode-regex" "^7.25.9"
+ "@babel/plugin-transform-unicode-sets-regex" "^7.25.9"
+ "@babel/preset-modules" "0.1.6-no-external-plugins"
+ babel-plugin-polyfill-corejs2 "^0.4.10"
+ babel-plugin-polyfill-corejs3 "^0.11.0"
+ babel-plugin-polyfill-regenerator "^0.6.1"
+ core-js-compat "^3.40.0"
+ semver "^6.3.1"
+
"@babel/preset-modules@0.1.6-no-external-plugins":
version "0.1.6-no-external-plugins"
resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz"
@@ -1172,6 +1109,17 @@
"@babel/plugin-transform-react-jsx-development" "^7.25.9"
"@babel/plugin-transform-react-pure-annotations" "^7.25.9"
+"@babel/preset-typescript@7.25.7":
+ version "7.25.7"
+ resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz"
+ integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-validator-option" "^7.25.7"
+ "@babel/plugin-syntax-jsx" "^7.25.7"
+ "@babel/plugin-transform-modules-commonjs" "^7.25.7"
+ "@babel/plugin-transform-typescript" "^7.25.7"
+
"@babel/preset-typescript@^7.21.0":
version "7.26.0"
resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz"
@@ -1183,16 +1131,12 @@
"@babel/plugin-transform-modules-commonjs" "^7.25.9"
"@babel/plugin-transform-typescript" "^7.25.9"
-"@babel/preset-typescript@7.25.7":
+"@babel/runtime@7.25.7":
version "7.25.7"
- resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz"
- integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==
+ resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz"
+ integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-validator-option" "^7.25.7"
- "@babel/plugin-syntax-jsx" "^7.25.7"
- "@babel/plugin-transform-modules-commonjs" "^7.25.7"
- "@babel/plugin-transform-typescript" "^7.25.7"
+ regenerator-runtime "^0.14.0"
"@babel/runtime@^7.8.4":
version "7.26.9"
@@ -1201,13 +1145,6 @@
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/runtime@7.25.7":
- version "7.25.7"
- resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz"
- integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==
- dependencies:
- regenerator-runtime "^0.14.0"
-
"@babel/template@^7.25.7", "@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.3.3":
version "7.26.9"
resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz"
@@ -1243,7 +1180,7 @@
resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
-"@colors/colors@^1.6.0", "@colors/colors@1.6.0":
+"@colors/colors@1.6.0", "@colors/colors@^1.6.0":
version "1.6.0"
resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz"
integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==
@@ -1273,10 +1210,10 @@
resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz"
integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==
-"@cypress/request@^3.0.8":
- version "3.0.8"
- resolved "https://registry.npmjs.org/@cypress/request/-/request-3.0.8.tgz"
- integrity sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==
+"@cypress/request@^3.0.9":
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.9.tgz#8ed6e08fea0c62998b5552301023af7268f11625"
+ integrity sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
@@ -1284,7 +1221,7 @@
combined-stream "~1.0.6"
extend "~3.0.2"
forever-agent "~0.6.1"
- form-data "~4.0.0"
+ form-data "~4.0.4"
http-signature "~1.4.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
@@ -1314,7 +1251,7 @@
enabled "2.0.x"
kuler "^2.0.0"
-"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.7":
+"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0":
version "0.5.7"
resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
@@ -1453,7 +1390,7 @@
ansi-escapes "^4.3.2"
yoctocolors-cjs "^2.1.2"
-"@inquirer/confirm@^5.1.6", "@inquirer/confirm@5.1.7":
+"@inquirer/confirm@5.1.7", "@inquirer/confirm@^5.1.6":
version "5.1.7"
resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.7.tgz"
integrity sha512-Xrfbrw9eSiHb+GsesO8TQIeHSMTP0xyvTCeeYevgZ4sKW+iz9w/47bgfG9b0niQm+xaLY2EWPBINUPldLwvYiw==
@@ -1964,7 +1901,7 @@
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
-"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@@ -1977,7 +1914,7 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@oclif/core@^4", "@oclif/core@4.2.9":
+"@oclif/core@4.2.9", "@oclif/core@^4":
version "4.2.9"
resolved "https://registry.npmjs.org/@oclif/core/-/core-4.2.9.tgz"
integrity sha512-cIlvpefLtorcyvnvJiOmYBqn6J6qdp/06tk54p2MddGEr0gnA7EIaQXM2UtRjf4ryDVCbIo+8IFRsW8Flt0uGA==
@@ -2008,11 +1945,71 @@
dependencies:
"@oclif/core" "^4"
+"@parcel/watcher-android-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
+ integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
+
"@parcel/watcher-darwin-arm64@2.5.1":
version "2.5.1"
resolved "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz"
integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
+"@parcel/watcher-darwin-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
+ integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
+
+"@parcel/watcher-freebsd-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
+ integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
+
+"@parcel/watcher-linux-arm-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
+ integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
+
+"@parcel/watcher-linux-arm-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
+ integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
+
+"@parcel/watcher-linux-arm64-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
+ integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
+
+"@parcel/watcher-linux-arm64-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
+ integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
+
+"@parcel/watcher-linux-x64-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e"
+ integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
+
+"@parcel/watcher-linux-x64-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
+ integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
+
+"@parcel/watcher-win32-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
+ integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
+
+"@parcel/watcher-win32-ia32@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
+ integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
+
+"@parcel/watcher-win32-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
+ integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
+
"@parcel/watcher@^2.4.1":
version "2.5.1"
resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz"
@@ -2054,13 +2051,6 @@
resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz"
integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
-"@playwright/test@^1.49.1", "@playwright/test@>=1":
- version "1.54.2"
- resolved "https://registry.npmjs.org/@playwright/test/-/test-1.54.2.tgz"
- integrity sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==
- dependencies:
- playwright "1.54.2"
-
"@pmmmwh/react-refresh-webpack-plugin@^0.5.11":
version "0.5.15"
resolved "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz"
@@ -2270,7 +2260,7 @@
"@svgr/babel-plugin-transform-react-native-svg" "8.1.0"
"@svgr/babel-plugin-transform-svg-component" "8.0.0"
-"@svgr/core@*", "@svgr/core@8.1.0":
+"@svgr/core@8.1.0":
version "8.1.0"
resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz"
integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==
@@ -2425,7 +2415,7 @@
"@types/eslint" "*"
"@types/estree" "*"
-"@types/eslint@*", "@types/eslint@>=8.0.0":
+"@types/eslint@*":
version "9.6.1"
resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz"
integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==
@@ -2577,7 +2567,7 @@
dependencies:
"@types/node" "*"
-"@types/node@*", "@types/node@>=18":
+"@types/node@*":
version "22.13.8"
resolved "https://registry.npmjs.org/@types/node/-/node-22.13.8.tgz"
integrity sha512-G3EfaZS+iOGYWLLRCEAXdWK9my08oHNZ+FHluRiggIYJPOXzhOiDgpVCUHaUvyIC5/fj7C/p637jdzC666AOKQ==
@@ -2703,7 +2693,7 @@
"@types/source-list-map" "*"
source-map "^0.7.3"
-"@types/webpack@^4.4.31", "@types/webpack@4.x || 5.x":
+"@types/webpack@^4.4.31":
version "4.41.40"
resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.40.tgz"
integrity sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==
@@ -2741,7 +2731,7 @@
dependencies:
"@types/node" "*"
-"@typescript-eslint/eslint-plugin@^5.0.0 || ^6.0.0 || ^7.0.0", "@typescript-eslint/eslint-plugin@^6.4.1":
+"@typescript-eslint/eslint-plugin@^6.4.1":
version "6.21.0"
resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz"
integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
@@ -2758,7 +2748,7 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.4.1":
+"@typescript-eslint/parser@^6.4.1":
version "6.21.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz"
integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
@@ -2832,6 +2822,19 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
+"@typescript-eslint/utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz"
+ integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.12"
+ "@types/semver" "^7.5.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ semver "^7.5.4"
+
"@typescript-eslint/utils@^5.10.0":
version "5.62.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz"
@@ -2846,19 +2849,6 @@
eslint-scope "^5.1.1"
semver "^7.3.7"
-"@typescript-eslint/utils@6.21.0":
- version "6.21.0"
- resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz"
- integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
- dependencies:
- "@eslint-community/eslint-utils" "^4.4.0"
- "@types/json-schema" "^7.0.12"
- "@types/semver" "^7.5.0"
- "@typescript-eslint/scope-manager" "6.21.0"
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/typescript-estree" "6.21.0"
- semver "^7.5.4"
-
"@typescript-eslint/visitor-keys@5.62.0":
version "5.62.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz"
@@ -2880,7 +2870,7 @@
resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
-"@webassemblyjs/ast@^1.14.1", "@webassemblyjs/ast@1.14.1":
+"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":
version "1.14.1"
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz"
integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==
@@ -2981,7 +2971,7 @@
"@webassemblyjs/wasm-gen" "1.14.1"
"@webassemblyjs/wasm-parser" "1.14.1"
-"@webassemblyjs/wasm-parser@^1.14.1", "@webassemblyjs/wasm-parser@1.14.1":
+"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1":
version "1.14.1"
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz"
integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==
@@ -3016,7 +3006,7 @@
resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz"
integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
-"@wordpress/babel-preset-default@^8.19.1", "@wordpress/babel-preset-default@^8.28.0":
+"@wordpress/babel-preset-default@^8.19.1":
version "8.28.0"
resolved "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.28.0.tgz"
integrity sha512-exC4p+V/uD2rsHl/hS1i12CYf5lVTGrxXlpLFVub9XHmnCc5MIjl//SbxQK6pu24woC96pYptqVJdQmco6EIzA==
@@ -3132,7 +3122,7 @@
"@wordpress/base-styles" "^6.4.0"
autoprefixer "^10.4.20"
-"@wordpress/prettier-config@^4.19.1", "@wordpress/prettier-config@^4.28.0":
+"@wordpress/prettier-config@^4.19.1":
version "4.28.0"
resolved "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.28.0.tgz"
integrity sha512-Lp6pvFZ+XgdEgO/mhL88asL74GzbZ6xdik6Nb9LTsW8psXsIX3O2t4BbGJP81EjvBujJt94kljTHEfZrgAuB8g==
@@ -3260,7 +3250,7 @@ acorn-walk@^8.0.0, acorn-walk@^8.0.2:
dependencies:
acorn "^8.11.0"
-"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0:
+acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0:
version "8.14.0"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz"
integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
@@ -3270,11 +3260,6 @@ adm-zip@^0.5.9:
resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz"
integrity sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==
-agent-base@^7.1.0, agent-base@^7.1.2:
- version "7.1.3"
- resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz"
- integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==
-
agent-base@6:
version "6.0.2"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
@@ -3282,6 +3267,11 @@ agent-base@6:
dependencies:
debug "4"
+agent-base@^7.1.0, agent-base@^7.1.2:
+ version "7.1.3"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz"
+ integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==
+
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz"
@@ -3300,13 +3290,6 @@ ajv-errors@^1.0.1:
resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz"
integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
-ajv-formats@^2.1.1:
- version "2.1.1"
- resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz"
- integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
- dependencies:
- ajv "^8.0.0"
-
ajv-formats@3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz"
@@ -3314,6 +3297,13 @@ ajv-formats@3.0.1:
dependencies:
ajv "^8.0.0"
+ajv-formats@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz"
+ integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+ dependencies:
+ ajv "^8.0.0"
+
ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
@@ -3326,27 +3316,17 @@ ajv-keywords@^5.1.0:
dependencies:
fast-deep-equal "^3.1.3"
-ajv@^6.12.4:
- version "6.12.6"
- resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ajv@^6.12.5, ajv@^6.9.1:
- version "6.12.6"
- resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ajv@8.17.1, ajv@^8.0.0, ajv@^8.0.1, ajv@^8.17.1, ajv@^8.9.0:
+ version "8.17.1"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz"
+ integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
+ fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
-ajv@^6.12.6, ajv@>=5.0.0:
+ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6:
version "6.12.6"
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -3356,16 +3336,6 @@ ajv@^6.12.6, ajv@>=5.0.0:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^8.0.0, ajv@^8.0.1, ajv@^8.17.1, ajv@^8.5.0, ajv@^8.8.2, ajv@^8.9.0, ajv@8.17.1:
- version "8.17.1"
- resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz"
- integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
- dependencies:
- fast-deep-equal "^3.1.3"
- fast-uri "^3.0.1"
- json-schema-traverse "^1.0.0"
- require-from-string "^2.0.2"
-
anafanafo@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/anafanafo/-/anafanafo-2.0.0.tgz"
@@ -3606,7 +3576,7 @@ asn1@~0.2.3:
dependencies:
safer-buffer "~2.1.0"
-assert-plus@^1.0.0, assert-plus@1.0.0:
+assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
@@ -3633,7 +3603,7 @@ async-function@^1.0.0:
resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz"
integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==
-async@^3.2.0, async@^3.2.3:
+async@^3.2.3:
version "3.2.6"
resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz"
integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
@@ -3701,7 +3671,7 @@ b4a@^1.6.4:
resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz"
integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==
-babel-jest@^29.7.0, babel-jest@29.7.0:
+babel-jest@29.7.0, babel-jest@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz"
integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==
@@ -3822,7 +3792,7 @@ balanced-match@^2.0.0:
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz"
integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
-bare-events@*, bare-events@^2.0.0, bare-events@^2.2.0:
+bare-events@^2.0.0, bare-events@^2.2.0:
version "2.5.4"
resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz"
integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==
@@ -3955,12 +3925,7 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
-browser-stdout@^1.3.1:
- version "1.3.1"
- resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz"
- integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
-
-browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.4, "browserslist@>= 4.21.0":
+browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.4:
version "4.24.4"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz"
integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
@@ -4109,11 +4074,6 @@ camelcase@^5.3.1:
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-camelcase@^6.0.0:
- version "6.3.0"
- resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
- integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-
camelcase@^6.2.0:
version "6.3.0"
resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
@@ -4148,6 +4108,14 @@ caseless@~0.12.0:
resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2, chalk@~4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
@@ -4165,14 +4133,6 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2, chalk@~4.1.2, chalk@4.1.2:
- version "4.1.2"
- resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
change-case@^4.1.2:
version "4.1.2"
resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz"
@@ -4236,18 +4196,11 @@ chokidar@^3.5.3:
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
- readdirp "~3.6.0"
- optionalDependencies:
- fsevents "~2.3.2"
-
-chokidar@^4.0.0:
- version "4.0.3"
- resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz"
- integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
- dependencies:
- readdirp "^4.0.1"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
-chokidar@^4.0.1:
+chokidar@^4.0.0:
version "4.0.3"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz"
integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
@@ -4424,16 +4377,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
color-string@^1.6.0:
version "1.9.1"
resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz"
@@ -4665,16 +4618,16 @@ core-js@^3.31.0:
resolved "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz"
integrity sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==
-core-util-is@~1.0.0:
- version "1.0.3"
- resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
- integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
core-util-is@1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
cosmiconfig@^7.0.0:
version "7.1.0"
resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz"
@@ -4686,17 +4639,7 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
-cosmiconfig@^8.0.0:
- version "8.3.6"
- resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz"
- integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
- dependencies:
- import-fresh "^3.3.0"
- js-yaml "^4.1.0"
- parse-json "^5.2.0"
- path-type "^4.0.0"
-
-cosmiconfig@^8.1.3:
+cosmiconfig@^8.0.0, cosmiconfig@^8.1.3:
version "8.3.6"
resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz"
integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
@@ -4946,12 +4889,12 @@ cypress-terminal-report@^7.1.0:
process "^0.11.10"
superstruct "0.14.2"
-cypress@>=10.0.0, cypress@>=12, cypress@>=8.0.0, cypress@14.3.3:
- version "14.3.3"
- resolved "https://registry.npmjs.org/cypress/-/cypress-14.3.3.tgz"
- integrity sha512-1Rz7zc9iqLww6BysaESqUhtIuaFHS7nL3wREovAKYsNhLTfX3TbcBWHWgEz70YimH2NkSOsm4oIcJJ9HYHOlew==
+cypress@15.1.0:
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-15.1.0.tgz#594311611e054738e61f445d5f65e7143934793b"
+ integrity sha512-jS4EfyOa2W5KXCN02WBdmy4bpBBmLGe+INhZeCvzRksfJuzBSYp3rNg2G+hfOwPzM+wwMwOYCo/kEnH+5RsSjA==
dependencies:
- "@cypress/request" "^3.0.8"
+ "@cypress/request" "^3.0.9"
"@cypress/xvfb" "^1.2.4"
"@types/sinonjs__fake-timers" "8.1.1"
"@types/sizzle" "^2.3.2"
@@ -4976,7 +4919,7 @@ cypress@>=10.0.0, cypress@>=12, cypress@>=8.0.0, cypress@14.3.3:
extract-zip "2.0.1"
figures "^3.2.0"
fs-extra "^9.1.0"
- getos "^3.2.1"
+ hasha "5.2.2"
is-installed-globally "~0.4.0"
lazy-ass "^1.6.0"
listr2 "^3.8.3"
@@ -4990,7 +4933,8 @@ cypress@>=10.0.0, cypress@>=12, cypress@>=8.0.0, cypress@14.3.3:
request-progress "^3.0.0"
semver "^7.7.1"
supports-color "^8.1.1"
- tmp "~0.2.3"
+ systeminformation "5.27.7"
+ tmp "~0.2.4"
tree-kill "1.2.2"
untildify "^4.0.0"
yauzl "^2.10.0"
@@ -5068,40 +5012,26 @@ debounce@^1.2.1:
resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz"
integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
-debug@^2.6.9:
+debug@2.6.9, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@^3.1.0:
- version "3.2.7"
- resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
- dependencies:
- ms "^2.1.1"
-
-debug@^3.2.7:
- version "3.2.7"
- resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
- dependencies:
- ms "^2.1.1"
-
-debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@^4.3.7, debug@^4.4.0, debug@4:
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@^4.3.7, debug@^4.4.0:
version "4.4.0"
resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
dependencies:
ms "^2.1.3"
-debug@2.6.9:
- version "2.6.9"
- resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+debug@^3.1.0, debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
- ms "2.0.0"
+ ms "^2.1.1"
decamelize-keys@^1.1.0:
version "1.1.1"
@@ -5116,12 +5046,7 @@ decamelize@^1.1.0, decamelize@^1.2.0:
resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-decamelize@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz"
- integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
-
-decimal.js@^10.4.2, decimal.js@10:
+decimal.js@10, decimal.js@^10.4.2:
version "10.5.0"
resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz"
integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==
@@ -5222,16 +5147,16 @@ delayed-stream@~1.0.0:
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-depd@~1.1.2:
- version "1.1.2"
- resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
- integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
-
depd@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
+ integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+
destroy@1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz"
@@ -5252,7 +5177,7 @@ detect-node@^2.0.4:
resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-devtools-protocol@*, devtools-protocol@0.0.1367902:
+devtools-protocol@0.0.1367902:
version "0.0.1367902"
resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz"
integrity sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==
@@ -5277,11 +5202,6 @@ diff@^5.0.0:
resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz"
integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==
-diff@^7.0.0:
- version "7.0.0"
- resolved "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz"
- integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==
-
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
@@ -5468,7 +5388,7 @@ enhanced-resolve@^5.17.1:
graceful-fs "^4.2.4"
tapable "^2.2.0"
-enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3":
+enquirer@^2.3.6:
version "2.4.1"
resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz"
integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
@@ -5647,12 +5567,12 @@ escape-html@^1.0.3, escape-html@~1.0.3:
resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-escape-string-regexp@^1.0.2:
- version "1.0.5"
- resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
- integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-escape-string-regexp@^1.0.5:
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
@@ -5662,11 +5582,6 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-escape-string-regexp@^4.0.0, escape-string-regexp@4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
escodegen@^2.0.0, escodegen@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz"
@@ -5678,7 +5593,7 @@ escodegen@^2.0.0, escodegen@^2.1.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-config-prettier@*, eslint-config-prettier@^8.3.0:
+eslint-config-prettier@^8.3.0:
version "8.10.0"
resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz"
integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==
@@ -5724,7 +5639,7 @@ eslint-plugin-import@^2.25.2:
string.prototype.trimend "^1.0.8"
tsconfig-paths "^3.15.0"
-eslint-plugin-jest@^27.4.3, eslint-plugin-jest@>=25:
+eslint-plugin-jest@^27.4.3:
version "27.9.0"
resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz"
integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==
@@ -5809,7 +5724,7 @@ eslint-plugin-react@^7.27.0:
string.prototype.matchall "^4.0.12"
string.prototype.repeat "^1.0.0"
-eslint-scope@^5.1.1, eslint-scope@5.1.1:
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -5835,7 +5750,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.0.0 || ^8.0.0 || ^9.0.0", "eslint@^7.5.0 || ^8.0.0 || ^9.0.0", eslint@^8.3.0, eslint@>=7, eslint@>=7.0.0, eslint@>=8, eslint@>=8.0.0:
+eslint@^8.3.0:
version "8.57.1"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz"
integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
@@ -5942,21 +5857,6 @@ events@^3.2.0:
resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-execa@^5.0.0:
- version "5.1.1"
- resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
- integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.0"
- human-signals "^2.1.0"
- is-stream "^2.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^4.0.1"
- onetime "^5.1.2"
- signal-exit "^3.0.3"
- strip-final-newline "^2.0.0"
-
execa@4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz"
@@ -5972,6 +5872,21 @@ execa@4.1.0:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
executable@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz"
@@ -6007,7 +5922,7 @@ expect@^29.7.0:
jest-message-util "^29.7.0"
jest-util "^29.7.0"
-express@^4.17.3, express@4.21.2:
+express@4.21.2, express@^4.17.3:
version "4.21.2"
resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz"
integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==
@@ -6058,17 +5973,7 @@ external-editor@^3.1.0:
iconv-lite "^0.4.24"
tmp "^0.0.33"
-extract-zip@^1.6.7:
- version "1.7.0"
- resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz"
- integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
- dependencies:
- concat-stream "^1.6.2"
- debug "^2.6.9"
- mkdirp "^0.5.4"
- yauzl "^2.10.0"
-
-extract-zip@^2.0.1, extract-zip@2.0.1:
+extract-zip@2.0.1, extract-zip@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz"
integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
@@ -6079,16 +5984,26 @@ extract-zip@^2.0.1, extract-zip@2.0.1:
optionalDependencies:
"@types/yauzl" "^2.9.1"
-extsprintf@^1.2.0:
- version "1.4.1"
- resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz"
- integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+extract-zip@^1.6.7:
+ version "1.7.0"
+ resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz"
+ integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
+ dependencies:
+ concat-stream "^1.6.2"
+ debug "^2.6.9"
+ mkdirp "^0.5.4"
+ yauzl "^2.10.0"
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+extsprintf@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz"
+ integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
@@ -6366,7 +6281,7 @@ forever-agent@~0.6.1:
resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
-form-data@^4.0.0, form-data@~4.0.0:
+form-data@^4.0.0, form-data@~4.0.4:
version "4.0.4"
resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz"
integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
@@ -6431,11 +6346,6 @@ fsevents@^2.3.2, fsevents@~2.3.2:
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-fsevents@2.3.2:
- version "2.3.2"
- resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
fsu@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz"
@@ -6542,13 +6452,6 @@ get-uri@^6.0.1:
data-uri-to-buffer "^6.0.2"
debug "^4.3.4"
-getos@^3.2.1:
- version "3.2.1"
- resolved "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz"
- integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
- dependencies:
- async "^3.2.0"
-
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"
@@ -6563,14 +6466,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
dependencies:
is-glob "^4.0.1"
-glob-parent@^6.0.1:
- version "6.0.2"
- resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
- integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
- dependencies:
- is-glob "^4.0.3"
-
-glob-parent@^6.0.2:
+glob-parent@^6.0.1, glob-parent@^6.0.2:
version "6.0.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
@@ -6594,18 +6490,6 @@ glob@^10.3.7:
package-json-from-dist "^1.0.0"
path-scurry "^1.11.1"
-glob@^10.4.5:
- version "10.4.5"
- resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz"
- integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^3.1.2"
- minimatch "^9.0.4"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^1.11.1"
-
glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.2.0:
version "7.2.3"
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
@@ -6821,6 +6705,14 @@ has-tostringtag@^1.0.2:
dependencies:
has-symbols "^1.0.3"
+hasha@5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1"
+ integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==
+ dependencies:
+ is-stream "^2.0.0"
+ type-fest "^0.8.0"
+
hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
@@ -6828,11 +6720,6 @@ hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"
-he@^1.2.0:
- version "1.2.0"
- resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
- integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-
header-case@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz"
@@ -6907,16 +6794,6 @@ http-deceiver@^1.2.7:
resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz"
integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
-http-errors@~1.6.2:
- version "1.6.3"
- resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"
- integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.0"
- statuses ">= 1.4.0 < 2"
-
http-errors@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
@@ -6928,6 +6805,16 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"
+ integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
http-link-header@^1.1.1:
version "1.1.3"
resolved "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz"
@@ -6955,17 +6842,6 @@ http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1:
agent-base "^7.1.0"
debug "^4.3.4"
-http-proxy-middleware@^2.0.3:
- version "2.0.7"
- resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz"
- integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==
- dependencies:
- "@types/http-proxy" "^1.17.8"
- http-proxy "^1.18.1"
- is-glob "^4.0.1"
- is-plain-obj "^3.0.0"
- micromatch "^4.0.2"
-
http-proxy-middleware@3.0.3:
version "3.0.3"
resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz"
@@ -6978,6 +6854,17 @@ http-proxy-middleware@3.0.3:
is-plain-object "^5.0.0"
micromatch "^4.0.8"
+http-proxy-middleware@^2.0.3:
+ version "2.0.7"
+ resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz"
+ integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==
+ dependencies:
+ "@types/http-proxy" "^1.17.8"
+ http-proxy "^1.18.1"
+ is-glob "^4.0.1"
+ is-plain-obj "^3.0.0"
+ micromatch "^4.0.2"
+
http-proxy@^1.18.1:
version "1.18.1"
resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz"
@@ -7030,21 +6917,14 @@ human-signals@^2.1.0:
resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-iconv-lite@^0.4.24, iconv-lite@0.4.24:
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
-iconv-lite@^0.6.3:
- version "0.6.3"
- resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
- integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
- dependencies:
- safer-buffer ">= 2.1.2 < 3.0.0"
-
-iconv-lite@0.6.3:
+iconv-lite@0.6.3, iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
@@ -7132,7 +7012,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -7142,6 +7022,11 @@ inherits@2.0.3:
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
+ini@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz"
+ integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
+
ini@^1.3.4, ini@^1.3.5:
version "1.3.8"
resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"
@@ -7152,11 +7037,6 @@ ini@~3.0.0:
resolved "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz"
integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==
-ini@2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz"
- integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
-
internal-slot@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz"
@@ -7189,16 +7069,16 @@ ip-address@^9.0.5:
jsbn "1.1.0"
sprintf-js "^1.1.3"
-ipaddr.js@^2.0.1:
- version "2.2.0"
- resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz"
- integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==
-
ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+ipaddr.js@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz"
+ integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==
+
irregular-plurals@^3.2.0:
version "3.5.0"
resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz"
@@ -7411,24 +7291,12 @@ is-plain-obj@^1.1.0:
resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz"
integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
-is-plain-obj@^2.1.0:
- version "2.1.0"
- resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz"
- integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
-
is-plain-obj@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz"
integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
-is-plain-object@^2.0.1:
- version "2.0.4"
- resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-plain-object@^2.0.4:
+is-plain-object@^2.0.1, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
@@ -7878,7 +7746,7 @@ jest-resolve-dependencies@^29.7.0:
jest-regex-util "^29.6.3"
jest-snapshot "^29.7.0"
-jest-resolve@*, jest-resolve@^29.7.0:
+jest-resolve@^29.7.0:
version "29.7.0"
resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz"
integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==
@@ -8031,7 +7899,7 @@ jest-worker@^29.7.0:
merge-stream "^2.0.0"
supports-color "^8.0.0"
-jest@*, jest@^29.6.2, jest@>=29:
+jest@^29.6.2:
version "29.7.0"
resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz"
integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==
@@ -8041,7 +7909,7 @@ jest@*, jest@^29.6.2, jest@>=29:
import-local "^3.0.2"
jest-cli "^29.7.0"
-joi@^17.13.3, joi@17.13.3:
+joi@17.13.3, joi@^17.13.3:
version "17.13.3"
resolved "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz"
integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==
@@ -8082,16 +7950,16 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
- integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
-
jsbn@1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz"
integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
+ integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
jsdoc-type-pratt-parser@~4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz"
@@ -8129,7 +7997,7 @@ jsdom@^20.0.0:
ws "^8.11.0"
xml-name-validator "^4.0.0"
-jsep@^0.4.0||^1.0.0, jsep@^1.4.0:
+jsep@^1.4.0:
version "1.4.0"
resolved "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz"
integrity sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==
@@ -8722,11 +8590,6 @@ mathml-tag-names@^2.1.3:
resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz"
integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
-mdn-data@^2.15.0:
- version "2.17.0"
- resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.17.0.tgz"
- integrity sha512-VT5LJBdLRI+cc3DPXJD89PGwI8yXuciE5gZJoSPnH4yeGzMPqxwkZv3BjFSoaWpmOlJNBhVT6HKeQPcZKlNEvA==
-
mdn-data@2.0.28:
version "2.0.28"
resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz"
@@ -8742,6 +8605,11 @@ mdn-data@2.12.2:
resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz"
integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==
+mdn-data@^2.15.0:
+ version "2.17.0"
+ resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.17.0.tgz"
+ integrity sha512-VT5LJBdLRI+cc3DPXJD89PGwI8yXuciE5gZJoSPnH4yeGzMPqxwkZv3BjFSoaWpmOlJNBhVT6HKeQPcZKlNEvA==
+
mdurl@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz"
@@ -8824,33 +8692,33 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8:
braces "^3.0.3"
picomatch "^2.3.1"
-"mime-db@>= 1.43.0 < 2":
- version "1.53.0"
- resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz"
- integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==
-
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34, mime-types@2.1.35:
+"mime-db@>= 1.43.0 < 2":
+ version "1.53.0"
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz"
+ integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==
+
+mime-types@2.1.35, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
-mime@^3.0.0:
- version "3.0.0"
- resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz"
- integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
-
mime@1.6.0:
version "1.6.0"
resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+mime@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz"
+ integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==
+
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
@@ -8884,6 +8752,13 @@ minimalistic-assert@^1.0.0:
resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
@@ -8912,13 +8787,6 @@ minimatch@~3.0.5:
dependencies:
brace-expansion "^1.1.7"
-minimatch@9.0.3:
- version "9.0.3"
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
minimist-options@4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz"
@@ -8938,7 +8806,7 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8:
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-mitt@^3.0.1, mitt@3.0.1:
+mitt@3.0.1, mitt@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz"
integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
@@ -8951,43 +8819,17 @@ mixin-object@^2.0.1:
for-in "^0.1.3"
is-extendable "^0.1.1"
-mkdirp@^0.5.4:
- version "0.5.6"
- resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz"
- integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
- dependencies:
- minimist "^1.2.6"
-
mkdirp@3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz"
integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-mocha@>=3.1.2, mocha@>=7:
- version "11.7.1"
- resolved "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz"
- integrity sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==
+mkdirp@^0.5.4:
+ version "0.5.6"
+ resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz"
+ integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
dependencies:
- browser-stdout "^1.3.1"
- chokidar "^4.0.1"
- debug "^4.3.5"
- diff "^7.0.0"
- escape-string-regexp "^4.0.0"
- find-up "^5.0.0"
- glob "^10.4.5"
- he "^1.2.0"
- js-yaml "^4.1.0"
- log-symbols "^4.1.0"
- minimatch "^9.0.5"
- ms "^2.1.3"
- picocolors "^1.1.1"
- serialize-javascript "^6.0.2"
- strip-json-comments "^3.1.1"
- supports-color "^8.1.1"
- workerpool "^9.2.0"
- yargs "^17.7.2"
- yargs-parser "^21.1.1"
- yargs-unparser "^2.0.0"
+ minimist "^1.2.6"
mochawesome-report-generator@^6.2.0:
version "6.2.0"
@@ -9028,16 +8870,16 @@ mrmime@^2.0.0:
resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz"
integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==
-ms@^2.1.1, ms@^2.1.3, ms@2.1.3:
- version "2.1.3"
- resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
ms@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+ms@2.1.3, ms@^2.1.1, ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
multicast-dns@^7.2.5:
version "7.2.5"
resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz"
@@ -9051,16 +8893,16 @@ mustache@4.2.0:
resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz"
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
-mute-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz"
- integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==
-
mute-stream@0.0.8:
version "0.0.8"
resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+mute-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz"
+ integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==
+
nanoid@^3.3.8:
version "3.3.8"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz"
@@ -9071,16 +8913,16 @@ natural-compare@^1.4.0:
resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-negotiator@~0.6.4:
- version "0.6.4"
- resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz"
- integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
-
negotiator@0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+negotiator@~0.6.4:
+ version "0.6.4"
+ resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz"
+ integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
+
neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
@@ -9166,7 +9008,7 @@ npm-normalize-package-bin@^1.0.1:
resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
-npm-package-json-lint@^6.4.0, npm-package-json-lint@>=6.0.0:
+npm-package-json-lint@^6.4.0:
version "6.4.0"
resolved "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-6.4.0.tgz"
integrity sha512-cuXAJJB1Rdqz0UO6w524matlBqDBjcNt7Ru+RDIu4y6RI1gVqiWBnylrK8sPRk81gGBA0X8hJbDXolVOoTc+sA==
@@ -9340,11 +9182,6 @@ open@^8.0.9, open@^8.4.0:
is-docker "^2.1.1"
is-wsl "^2.2.0"
-openapi-types@>=7:
- version "12.1.3"
- resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz"
- integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
-
opener@^1.5.2:
version "1.5.2"
resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz"
@@ -9635,12 +9472,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"
- integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-
-pify@^2.2.0:
+pify@^2.0.0, pify@^2.2.0:
version "2.3.0"
resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz"
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
@@ -9681,20 +9513,6 @@ pkg-dir@^7.0.0:
dependencies:
find-up "^6.3.0"
-playwright-core@1.54.2:
- version "1.54.2"
- resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.2.tgz"
- integrity sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==
-
-playwright@1.54.2:
- version "1.54.2"
- resolved "https://registry.npmjs.org/playwright/-/playwright-1.54.2.tgz"
- integrity sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==
- dependencies:
- playwright-core "1.54.2"
- optionalDependencies:
- fsevents "2.3.2"
-
plur@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz"
@@ -9961,14 +9779,6 @@ postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.0:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
-postcss-selector-parser@^7.1.0:
- version "7.1.0"
- resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz"
- integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==
- dependencies:
- cssesc "^3.0.0"
- util-deprecate "^1.0.2"
-
postcss-svgo@^6.0.3:
version "6.0.3"
resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz"
@@ -9989,7 +9799,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.0, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.2, postcss@^8.3.3, postcss@^8.4.21, postcss@^8.4.29, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.5, postcss@^8.5.3:
+postcss@^8.4.21, postcss@^8.4.33, postcss@^8.4.5, postcss@^8.5.3:
version "8.5.3"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz"
integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==
@@ -10010,7 +9820,7 @@ prettier-linter-helpers@^1.0.0:
dependencies:
fast-diff "^1.1.2"
-prettier@>=3, prettier@>=3.0.0, "prettier@npm:wp-prettier@3.0.3":
+"prettier@npm:wp-prettier@3.0.3":
version "3.0.3"
resolved "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz"
integrity sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==
@@ -10083,16 +9893,16 @@ proxy-agent@^6.5.0:
proxy-from-env "^1.1.0"
socks-proxy-agent "^8.0.5"
-proxy-from-env@^1.1.0:
- version "1.1.0"
- resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
- integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
-
proxy-from-env@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz"
integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
psl@^1.1.33:
version "1.15.0"
resolved "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz"
@@ -10183,7 +9993,7 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
-range-parser@^1.2.1, range-parser@~1.2.1, range-parser@1.2.1:
+range-parser@1.2.1, range-parser@^1.2.1, range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
@@ -10198,14 +10008,6 @@ raw-body@2.5.2:
iconv-lite "0.4.24"
unpipe "1.0.0"
-react-dom@^18.0.0:
- version "18.3.1"
- resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
- integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
- dependencies:
- loose-envify "^1.1.0"
- scheduler "^0.23.2"
-
react-is@^16.13.1:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
@@ -10216,12 +10018,12 @@ react-is@^18.0.0:
resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-react-refresh@^0.14.0, "react-refresh@>=0.10.0 <1.0.0":
+react-refresh@^0.14.0:
version "0.14.2"
resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz"
integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
-react@^18.0.0, react@^18.3.0, react@^18.3.1:
+react@^18.3.0:
version "18.3.1"
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
@@ -10247,20 +10049,7 @@ read-pkg@^5.2.0:
parse-json "^5.0.0"
type-fest "^0.6.0"
-readable-stream@^2.0.1:
- version "2.3.8"
- resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^2.2.2:
+readable-stream@^2.0.1, readable-stream@^2.2.2:
version "2.3.8"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
@@ -10571,7 +10360,7 @@ safe-array-concat@^1.1.3:
has-symbols "^1.1.0"
isarray "^2.0.5"
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1:
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -10603,7 +10392,7 @@ safe-stable-stringify@^2.3.1:
resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz"
integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
-safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0:
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -10615,7 +10404,7 @@ sass-loader@^16.0.3:
dependencies:
neo-async "^2.6.2"
-sass@^1.3.0, sass@^1.54.0:
+sass@^1.54.0:
version "1.85.1"
resolved "https://registry.npmjs.org/sass/-/sass-1.85.1.tgz"
integrity sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==
@@ -10638,13 +10427,6 @@ saxes@^6.0.0:
dependencies:
xmlchars "^2.2.0"
-scheduler@^0.23.2:
- version "0.23.2"
- resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz"
- integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
- dependencies:
- loose-envify "^1.1.0"
-
schema-utils@^3.0.0:
version "3.3.0"
resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz"
@@ -10677,36 +10459,21 @@ selfsigned@^2.1.1:
"@types/node-forge" "^1.3.0"
node-forge "^1"
-semver@^5.3.0:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0:
version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-semver@^6.0.0:
- version "6.3.1"
- resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^6.3.0, semver@^6.3.1:
+semver@^6.0.0, semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.1:
- version "7.7.1"
- resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz"
- integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
-
-semver@^7.7.0:
+semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.0, semver@^7.7.1:
version "7.7.1"
resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
-"semver@2 || 3 || 4 || 5":
- version "5.7.2"
- resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
- integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-
send@0.19.0:
version "0.19.0"
resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz"
@@ -10885,12 +10652,7 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
-signal-exit@^4.1.0:
+signal-exit@^4.0.1, signal-exit@^4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
@@ -10992,7 +10754,7 @@ socks@^2.8.3:
ip-address "^9.0.5"
smart-buffer "^4.2.0"
-source-map-js@^1.0.1, source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0":
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -11006,14 +10768,6 @@ source-map-loader@^3.0.0:
iconv-lite "^0.6.3"
source-map-js "^1.0.1"
-source-map-support@~0.5.20:
- version "0.5.21"
- resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
source-map-support@0.5.13:
version "0.5.13"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz"
@@ -11022,6 +10776,14 @@ source-map-support@0.5.13:
buffer-from "^1.0.0"
source-map "^0.6.0"
+source-map-support@~0.5.20:
+ version "0.5.21"
+ resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
@@ -11148,16 +10910,16 @@ stackframe@^1.3.4:
resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz"
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
-"statuses@>= 1.4.0 < 2":
- version "1.5.0"
- resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
- integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
-
statuses@2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+"statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
+ integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+
streamsearch@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz"
@@ -11173,20 +10935,6 @@ streamx@^2.15.0, streamx@^2.21.0:
optionalDependencies:
bare-events "^2.2.0"
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
string-format@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz"
@@ -11295,6 +11043,20 @@ string.prototype.trimstart@^1.0.8:
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
@@ -11391,7 +11153,7 @@ stylelint-scss@^6.4.0:
postcss-selector-parser "^7.1.0"
postcss-value-parser "^4.2.0"
-stylelint@^16.0.2, stylelint@^16.1.0, stylelint@^16.6.1, stylelint@^16.8.2:
+stylelint@^16.8.2:
version "16.15.0"
resolved "https://registry.npmjs.org/stylelint/-/stylelint-16.15.0.tgz"
integrity sha512-OK6Rs7EPdcdmjqiDycadZY4fw3f5/TC1X6/tGjnF3OosbwCeNs7nG+79MCAtjEg7ckwqTJTsku08e0Rmaz5nUw==
@@ -11454,21 +11216,7 @@ supports-color@^7.0.0, supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
-supports-color@^8:
- version "8.1.1"
- resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
- integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
- dependencies:
- has-flag "^4.0.0"
-
-supports-color@^8.0.0:
- version "8.1.1"
- resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
- integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
- dependencies:
- has-flag "^4.0.0"
-
-supports-color@^8.1.1:
+supports-color@^8, supports-color@^8.0.0, supports-color@^8.1.1:
version "8.1.1"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
@@ -11532,6 +11280,11 @@ synckit@^0.9.1:
"@pkgr/core" "^0.1.0"
tslib "^2.6.2"
+systeminformation@5.27.7:
+ version "5.27.7"
+ resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.27.7.tgz#4dc9d436419948cd5e5f076779a1298220d19a72"
+ integrity sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==
+
table@^6.9.0:
version "6.9.0"
resolved "https://registry.npmjs.org/table/-/table-6.9.0.tgz"
@@ -11681,10 +11434,10 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"
-tmp@~0.2.3:
- version "0.2.3"
- resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz"
- integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==
+tmp@~0.2.4:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
+ integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
tmpl@1.0.5:
version "1.0.5"
@@ -11732,7 +11485,7 @@ tr46@^3.0.0:
dependencies:
punycode "^2.1.1"
-tree-kill@^1.2.2, tree-kill@1.2.2:
+tree-kill@1.2.2, tree-kill@^1.2.2:
version "1.2.2"
resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
@@ -11769,16 +11522,16 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
+tslib@2, tslib@2.8.1, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2:
+ version "2.8.1"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.6.2, tslib@2, tslib@2.8.1:
- version "2.8.1"
- resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
- integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
@@ -11815,7 +11568,7 @@ type-fest@^0.18.0:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz"
integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
-type-fest@^0.20.2, "type-fest@>=0.17.0 <5.0.0":
+type-fest@^0.20.2:
version "0.20.2"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
@@ -11830,7 +11583,7 @@ type-fest@^0.6.0:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz"
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-type-fest@^0.8.1:
+type-fest@^0.8.0, type-fest@^0.8.1:
version "0.8.1"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
@@ -11898,7 +11651,7 @@ typed-emitter@2.1.0:
resolved "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz"
integrity sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==
optionalDependencies:
- rxjs "*"
+ rxjs "^7.5.2"
typed-query-selector@^2.12.0:
version "2.12.0"
@@ -11917,11 +11670,6 @@ typedarray@^0.0.6:
resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-"typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=4.2.0, typescript@>=4.9.5, typescript@>=5:
- version "5.9.2"
- resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz"
- integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==
-
uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6"
resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz"
@@ -11995,7 +11743,7 @@ universalify@^2.0.0:
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz"
integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
-unpipe@~1.0.0, unpipe@1.0.0:
+unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
@@ -12187,7 +11935,7 @@ webpack-bundle-analyzer@^4.9.1:
sirv "^2.0.3"
ws "^7.3.1"
-webpack-cli@^5.1.4, webpack-cli@5.x.x:
+webpack-cli@^5.1.4:
version "5.1.4"
resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz"
integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==
@@ -12217,7 +11965,7 @@ webpack-dev-middleware@^5.3.4:
range-parser "^1.2.1"
schema-utils "^4.0.0"
-webpack-dev-server@^4.15.1, "webpack-dev-server@3.x || 4.x || 5.x":
+webpack-dev-server@^4.15.1:
version "4.15.2"
resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz"
integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==
@@ -12267,7 +12015,7 @@ webpack-sources@^3.2.3:
resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
-webpack@*, "webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.97.0, "webpack@>=4.43.0 <6.0.0", webpack@>=5, webpack@5.x.x:
+webpack@^5.97.0:
version "5.98.0"
resolved "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz"
integrity sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==
@@ -12296,7 +12044,7 @@ webpack@*, "webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0
watchpack "^2.4.1"
webpack-sources "^3.2.3"
-websocket-driver@^0.7.4, websocket-driver@>=0.5.1:
+websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
version "0.7.4"
resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz"
integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
@@ -12444,11 +12192,6 @@ wordwrap@^1.0.0:
resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
-workerpool@^9.2.0:
- version "9.3.3"
- resolved "https://registry.npmjs.org/workerpool/-/workerpool-9.3.3.tgz"
- integrity sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==
-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
@@ -12516,25 +12259,15 @@ write-file-atomic@^5.0.1:
imurmurhash "^0.1.4"
signal-exit "^4.0.1"
-ws@^7.0.0:
- version "7.5.10"
- resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz"
- integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
-
-ws@^7.3.1:
- version "7.5.10"
- resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz"
- integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
-
-ws@^8.11.0, ws@^8.13.0, ws@^8.18.0, ws@8.18.1:
+ws@8.18.1, ws@^8.11.0, ws@^8.13.0, ws@^8.18.0, ws@^8.18.1:
version "8.18.1"
resolved "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz"
integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==
-ws@^8.18.1:
- version "8.18.1"
- resolved "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz"
- integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==
+ws@^7.0.0, ws@^7.3.1:
+ version "7.5.10"
+ resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz"
+ integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
xdg-basedir@^4.0.0:
version "4.0.0"
@@ -12593,16 +12326,6 @@ yargs-parser@^21.0.0, yargs-parser@^21.1.1:
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-yargs-unparser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz"
- integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
- dependencies:
- camelcase "^6.0.0"
- decamelize "^4.0.0"
- flat "^5.0.2"
- is-plain-obj "^2.1.0"
-
yargs@^17.2.1, yargs@^17.3.0, yargs@^17.3.1, yargs@^17.7.2:
version "17.7.2"
resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
@@ -12639,12 +12362,12 @@ yoctocolors-cjs@^2.1.2:
resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz"
integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==
-zod@^3.24.1:
- version "3.24.2"
- resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz"
- integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==
-
zod@3.23.8:
version "3.23.8"
resolved "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz"
integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==
+
+zod@^3.24.1:
+ version "3.24.2"
+ resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz"
+ integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==