From cd15158eeded5b0f88941f04c0ca772d73dcd129 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 26 Aug 2025 18:37:56 +0200 Subject: [PATCH 01/52] Update follow return types and error handling Changed the return type documentation for follow methods to only return WP_Post or WP_Error. Improved error handling in Following::follow by returning a WP_Error if adding to outbox fails. --- includes/collection/class-following.php | 8 ++++++-- includes/functions.php | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/includes/collection/class-following.php b/includes/collection/class-following.php index c0d8b3e56..4bb696f30 100644 --- a/includes/collection/class-following.php +++ b/includes/collection/class-following.php @@ -60,7 +60,7 @@ class Following { * @param \WP_Post|int $post The ID of the remote Actor. * @param int $user_id The ID of the WordPress User. * - * @return int|false|\WP_Post|\WP_Error The Outbox ID or false on failure, the Actor post or a WP_Error. + * @return \WP_Post|\WP_Error The Actor post or a WP_Error. */ public static function follow( $post, $user_id ) { $post = \get_post( $post ); @@ -88,7 +88,11 @@ public static function follow( $post, $user_id ) { $follow->set_object( $post->guid ); $follow->set_to( array( $post->guid ) ); - return add_to_outbox( $follow, null, $user_id, ACTIVITYPUB_CONTENT_VISIBILITY_PRIVATE ); + $id = add_to_outbox( $follow, null, $user_id, ACTIVITYPUB_CONTENT_VISIBILITY_PRIVATE ); + + if ( ! $id ) { + return new \WP_Error( 'activitypub_follow_failed', 'Failed to add follow to outbox' ); + } } return $post; diff --git a/includes/functions.php b/includes/functions.php index c1b2cabbf..3534279d0 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1545,7 +1545,7 @@ function add_to_outbox( $data, $activity_type = null, $user_id = 0, $content_vis * @param string|int $remote_actor The Actor URL, WebFinger Resource or Post-ID of the remote Actor. * @param int $user_id The ID of the WordPress User. * - * @return int|false|\WP_Post|\WP_Error The Outbox ID or false on failure, the Actor post or a WP_Error. + * @return \WP_Post|\WP_Error The Actor post or a WP_Error. */ function follow( $remote_actor, $user_id ) { if ( \is_numeric( $remote_actor ) ) { From 0a25386422167627bbcca9907552f8ec6bd1b560 Mon Sep 17 00:00:00 2001 From: Automattic Bot Date: Tue, 26 Aug 2025 18:38:42 +0200 Subject: [PATCH 02/52] Add changelog --- .github/changelog/2094-from-description | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/changelog/2094-from-description diff --git a/.github/changelog/2094-from-description b/.github/changelog/2094-from-description new file mode 100644 index 000000000..2d8665765 --- /dev/null +++ b/.github/changelog/2094-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + + From 33caee124d20bd4657ef501e46d6d42229fa91c7 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 26 Aug 2025 18:40:56 +0200 Subject: [PATCH 03/52] Update includes/collection/class-following.php Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- includes/collection/class-following.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/includes/collection/class-following.php b/includes/collection/class-following.php index 4bb696f30..b0bf8ba83 100644 --- a/includes/collection/class-following.php +++ b/includes/collection/class-following.php @@ -88,9 +88,7 @@ public static function follow( $post, $user_id ) { $follow->set_object( $post->guid ); $follow->set_to( array( $post->guid ) ); - $id = add_to_outbox( $follow, null, $user_id, ACTIVITYPUB_CONTENT_VISIBILITY_PRIVATE ); - - if ( ! $id ) { + if ( ! $id || \is_wp_error( $id ) ) { return new \WP_Error( 'activitypub_follow_failed', 'Failed to add follow to outbox' ); } } From a55ace0417a4e1614010b21c00325d70f80650cb Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 26 Aug 2025 18:42:11 +0200 Subject: [PATCH 04/52] Remove obsolete changelog entry 2094-from-description Deleted the .github/changelog/2094-from-description file as it is no longer needed. --- .github/changelog/2094-from-description | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .github/changelog/2094-from-description diff --git a/.github/changelog/2094-from-description b/.github/changelog/2094-from-description deleted file mode 100644 index 2d8665765..000000000 --- a/.github/changelog/2094-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - - From 183e5da83b3e402cd306dca6c372d8d1e5a4d236 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 26 Aug 2025 18:44:05 +0200 Subject: [PATCH 05/52] Add follow activity to outbox with private visibility Introduces a call to add_to_outbox when creating a follow activity, ensuring it is added with private visibility. This helps manage the visibility of follow actions and improves activity tracking. --- includes/collection/class-following.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/includes/collection/class-following.php b/includes/collection/class-following.php index b0bf8ba83..6aa6b0408 100644 --- a/includes/collection/class-following.php +++ b/includes/collection/class-following.php @@ -88,6 +88,8 @@ public static function follow( $post, $user_id ) { $follow->set_object( $post->guid ); $follow->set_to( array( $post->guid ) ); + $id = add_to_outbox( $follow, null, $user_id, ACTIVITYPUB_CONTENT_VISIBILITY_PRIVATE ); + if ( ! $id || \is_wp_error( $id ) ) { return new \WP_Error( 'activitypub_follow_failed', 'Failed to add follow to outbox' ); } From 38aa151e4998840dba2999b522fde4992a61fec0 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 26 Aug 2025 20:02:55 +0200 Subject: [PATCH 06/52] Update CLI example to use underscore in command Changed the example command from 'self-destruct' to 'self_destruct' in the class-cli.php file to reflect the correct command syntax. --- includes/class-cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/class-cli.php b/includes/class-cli.php index 4950d5101..fef723fef 100644 --- a/includes/class-cli.php +++ b/includes/class-cli.php @@ -23,7 +23,7 @@ class Cli extends \WP_CLI_Command { * * ## EXAMPLES * - * $ wp activitypub self-destruct + * $ wp activitypub self_destruct * * @param array|null $args The arguments. * @param array|null $assoc_args The associative arguments. From 51ece21870452f6621ef1a281df20a4b5bab5dd1 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 26 Aug 2025 20:04:35 +0200 Subject: [PATCH 07/52] Revert "Update CLI example to use underscore in command" This reverts commit 38aa151e4998840dba2999b522fde4992a61fec0. --- includes/class-cli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/class-cli.php b/includes/class-cli.php index fef723fef..4950d5101 100644 --- a/includes/class-cli.php +++ b/includes/class-cli.php @@ -23,7 +23,7 @@ class Cli extends \WP_CLI_Command { * * ## EXAMPLES * - * $ wp activitypub self_destruct + * $ wp activitypub self-destruct * * @param array|null $args The arguments. * @param array|null $assoc_args The associative arguments. From 17632905b7d32987da4fcd1a65c3bad24643f8c5 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 24 Sep 2025 09:29:27 -0500 Subject: [PATCH 08/52] Fix PHP warning in bulk edit scenario when post_author is missing (#2230) --- .github/changelog/2230-from-description | 4 ++++ includes/scheduler/class-post.php | 2 +- tests/includes/scheduler/class-test-post.php | 12 +++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 .github/changelog/2230-from-description diff --git a/.github/changelog/2230-from-description b/.github/changelog/2230-from-description new file mode 100644 index 000000000..aea29a2ce --- /dev/null +++ b/.github/changelog/2230-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fix PHP warning in bulk edit scenario when post_author is missing from $_REQUEST diff --git a/includes/scheduler/class-post.php b/includes/scheduler/class-post.php index 408f5ad17..4a9f3a34c 100644 --- a/includes/scheduler/class-post.php +++ b/includes/scheduler/class-post.php @@ -46,7 +46,7 @@ public static function schedule_post_activity( $post_id, $post, $update, $post_b } // Bail on bulk edits, unless post author or post status changed. - if ( isset( $_REQUEST['bulk_edit'] ) && -1 === (int) $_REQUEST['post_author'] && -1 === (int) $_REQUEST['_status'] ) { // phpcs:ignore WordPress + if ( isset( $_REQUEST['bulk_edit'] ) && ( ! isset( $_REQUEST['post_author'] ) || -1 === (int) $_REQUEST['post_author'] ) && -1 === (int) $_REQUEST['_status'] ) { // phpcs:ignore WordPress return; } diff --git a/tests/includes/scheduler/class-test-post.php b/tests/includes/scheduler/class-test-post.php index 9516bbfde..a0e8fb624 100644 --- a/tests/includes/scheduler/class-test-post.php +++ b/tests/includes/scheduler/class-test-post.php @@ -117,6 +117,16 @@ public function test_schedule_post_activity_bulk_edit() { $post_id = self::factory()->post->create( array( 'post_author' => self::$user_id ) ); $activitypub_id = \add_query_arg( 'p', $post_id, \home_url( '/' ) ); + // Test bulk edit with missing post_author (should not generate PHP warnings). + $_REQUEST['bulk_edit'] = 1; + $_REQUEST['_status'] = -1; + $_REQUEST['post'] = array( $post_id ); + + bulk_edit_posts( $_REQUEST ); // phpcs:ignore WordPress.Security.NonceVerification + + $outbox_item = $this->get_latest_outbox_item( $activitypub_id ); + $this->assertNotSame( 'Update', \get_post_meta( $outbox_item->ID, '_activitypub_activity_type', true ) ); + // Test bulk edit that should bail (no author or status change). $_REQUEST['bulk_edit'] = 1; $_REQUEST['post_author'] = -1; @@ -152,7 +162,7 @@ public function test_schedule_post_activity_bulk_edit() { $this->assertSame( 'Delete', \get_post_meta( $outbox_item->ID, '_activitypub_activity_type', true ) ); // Clean up. - unset( $_REQUEST['bulk_edit'], $_REQUEST['post_author'], $_REQUEST['post_status'] ); + unset( $_REQUEST['bulk_edit'], $_REQUEST['post_author'], $_REQUEST['_status'], $_REQUEST['post'] ); \wp_delete_post( $post_id, true ); } From d476c619f756a5011134fc5a8f5482ff70d6ad09 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 24 Sep 2025 11:17:46 -0500 Subject: [PATCH 09/52] Add following meta key to Jetpack sync allowlist (#2226) --- .github/changelog/2226-from-description | 4 ++++ integration/class-jetpack.php | 13 +++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) create mode 100644 .github/changelog/2226-from-description diff --git a/.github/changelog/2226-from-description b/.github/changelog/2226-from-description new file mode 100644 index 000000000..dfa6a5418 --- /dev/null +++ b/.github/changelog/2226-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Sync following meta to enable RSS feed subscriptions for ActivityPub actors in WordPress.com Reader diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index f711c3aef..7893e5d34 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -8,6 +8,7 @@ namespace Activitypub\Integration; use Activitypub\Collection\Followers; +use Activitypub\Collection\Following; use Activitypub\Comment; /** @@ -32,14 +33,10 @@ public static function init() { * @return array The Jetpack sync allow list with ActivityPub meta keys. */ public static function add_sync_meta( $allow_list ) { - if ( ! is_array( $allow_list ) ) { - return $allow_list; - } - $activitypub_meta_keys = array( - Followers::FOLLOWER_META_KEY, - '_activitypub_inbox', - ); - return \array_merge( $allow_list, $activitypub_meta_keys ); + $allow_list[] = Followers::FOLLOWER_META_KEY; + $allow_list[] = Following::FOLLOWING_META_KEY; + + return $allow_list; } /** From fcf057cd965112801f61d09bd612902c1d58fa3d Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 24 Sep 2025 13:34:07 -0500 Subject: [PATCH 10/52] Migration: Re-use async batch infrastructure (#1343) --- includes/class-dispatcher.php | 3 + includes/class-migration.php | 92 ++++--------------------- includes/class-scheduler.php | 31 ++++++--- tests/includes/class-test-migration.php | 92 ++----------------------- tests/includes/class-test-scheduler.php | 65 +++++++++++++++++ 5 files changed, 112 insertions(+), 171 deletions(-) diff --git a/includes/class-dispatcher.php b/includes/class-dispatcher.php index 5b4686de6..cac61e66c 100644 --- a/includes/class-dispatcher.php +++ b/includes/class-dispatcher.php @@ -45,6 +45,9 @@ public static function init() { \add_filter( 'activitypub_additional_inboxes', array( self::class, 'add_inboxes_by_mentioned_actors' ), 10, 3 ); \add_filter( 'activitypub_additional_inboxes', array( self::class, 'add_inboxes_of_replied_urls' ), 10, 3 ); \add_filter( 'activitypub_additional_inboxes', array( self::class, 'add_inboxes_of_relays' ), 10, 3 ); + + Scheduler::register_async_batch_callback( 'activitypub_send_activity', array( self::class, 'send_to_followers' ) ); + Scheduler::register_async_batch_callback( 'activitypub_retry_activity', array( self::class, 'retry_send_to_followers' ) ); } /** diff --git a/includes/class-migration.php b/includes/class-migration.php index e7a55a222..3c358cc62 100644 --- a/includes/class-migration.php +++ b/includes/class-migration.php @@ -24,11 +24,12 @@ class Migration { * Initialize the class, registering WordPress hooks. */ public static function init() { - \add_action( 'activitypub_migrate', array( self::class, 'async_migration' ) ); - \add_action( 'activitypub_upgrade', array( self::class, 'async_upgrade' ), 10, 99 ); - \add_action( 'activitypub_update_comment_counts', array( self::class, 'update_comment_counts' ), 10, 2 ); - self::maybe_migrate(); + + Scheduler::register_async_batch_callback( 'activitypub_migrate_from_0_17', array( self::class, 'migrate_from_0_17' ) ); + Scheduler::register_async_batch_callback( 'activitypub_update_comment_counts', array( self::class, 'update_comment_counts' ) ); + Scheduler::register_async_batch_callback( 'activitypub_create_post_outbox_items', array( self::class, 'create_post_outbox_items' ) ); + Scheduler::register_async_batch_callback( 'activitypub_create_comment_outbox_items', array( self::class, 'create_comment_outbox_items' ) ); } /** @@ -122,13 +123,12 @@ public static function maybe_migrate() { $version_from_db = ACTIVITYPUB_PLUGIN_VERSION; } - // Schedule the async migration. - if ( ! \wp_next_scheduled( 'activitypub_migrate', $version_from_db ) ) { - \wp_schedule_single_event( \time(), 'activitypub_migrate', array( $version_from_db ) ); - } if ( \version_compare( $version_from_db, '0.17.0', '<' ) ) { self::migrate_from_0_16(); } + if ( \version_compare( $version_from_db, '1.0.0', '<' ) ) { + \wp_schedule_single_event( \time(), 'activitypub_migrate_from_0_17' ); + } if ( \version_compare( $version_from_db, '1.3.0', '<' ) ) { self::migrate_from_1_2_0(); } @@ -160,8 +160,9 @@ public static function maybe_migrate() { add_action( 'init', 'flush_rewrite_rules', 20 ); } if ( \version_compare( $version_from_db, '5.0.0', '<' ) ) { - \wp_schedule_single_event( \time(), 'activitypub_upgrade', array( 'create_post_outbox_items' ) ); - \wp_schedule_single_event( \time() + 15, 'activitypub_upgrade', array( 'create_comment_outbox_items' ) ); + Scheduler::register_schedules(); + \wp_schedule_single_event( \time(), 'activitypub_create_post_outbox_items' ); + \wp_schedule_single_event( \time() + 15, 'activitypub_create_comment_outbox_items' ); add_action( 'init', 'flush_rewrite_rules', 20 ); } if ( \version_compare( $version_from_db, '5.4.0', '<' ) ) { @@ -231,49 +232,6 @@ public static function maybe_migrate() { self::unlock(); } - /** - * Asynchronously migrates the database structure. - * - * @param string $version_from_db The version from which to migrate. - */ - public static function async_migration( $version_from_db ) { - if ( \version_compare( $version_from_db, '1.0.0', '<' ) ) { - self::migrate_from_0_17(); - } - } - - /** - * Asynchronously runs upgrade routines. - * - * @param callable $callback Callable upgrade routine. Must be a method of this class. - * @params mixed ...$args Optional. Parameters that get passed to the callback. - */ - public static function async_upgrade( $callback ) { - $args = \func_get_args(); - - // Bail if the existing lock is still valid. - if ( self::is_locked() ) { - \wp_schedule_single_event( time() + MINUTE_IN_SECONDS, 'activitypub_upgrade', $args ); - return; - } - - self::lock(); - - $callback = array_shift( $args ); // Remove $callback from arguments. - $next = \call_user_func_array( array( self::class, $callback ), $args ); - - self::unlock(); - - if ( ! empty( $next ) ) { - // Schedule the next run, adding the result to the arguments. - \wp_schedule_single_event( - \time() + 30, - 'activitypub_upgrade', - \array_merge( array( $callback ), \array_values( $next ) ) - ); - } - } - /** * Updates the custom template to use shortcodes instead of the deprecated templates. */ @@ -515,25 +473,12 @@ public static function migrate_to_4_7_2() { * @see Comment::pre_wp_update_comment_count_now() * @param int $batch_size Optional. Number of posts to process per batch. Default 100. * @param int $offset Optional. Number of posts to skip. Default 0. + * + * @return int[]|void Array with batch size and offset if there are more posts to process. */ public static function update_comment_counts( $batch_size = 100, $offset = 0 ) { global $wpdb; - // Bail if the existing lock is still valid. - if ( self::is_locked() ) { - \wp_schedule_single_event( - time() + ( 5 * MINUTE_IN_SECONDS ), - 'activitypub_update_comment_counts', - array( - 'batch_size' => $batch_size, - 'offset' => $offset, - ) - ); - return; - } - - self::lock(); - Comment::register_comment_types(); $comment_types = Comment::get_comment_type_slugs(); $type_inclusion = "AND comment_type IN ('" . implode( "','", $comment_types ) . "')"; @@ -554,17 +499,8 @@ public static function update_comment_counts( $batch_size = 100, $offset = 0 ) { if ( count( $post_ids ) === $batch_size ) { // Schedule next batch. - \wp_schedule_single_event( - time() + MINUTE_IN_SECONDS, - 'activitypub_update_comment_counts', - array( - 'batch_size' => $batch_size, - 'offset' => $offset + $batch_size, - ) - ); + return array( $batch_size, $offset + $batch_size ); } - - self::unlock(); } /** diff --git a/includes/class-scheduler.php b/includes/class-scheduler.php index e79300a89..7437a82ed 100644 --- a/includes/class-scheduler.php +++ b/includes/class-scheduler.php @@ -36,19 +36,12 @@ class Scheduler { public static function init() { self::register_schedulers(); - self::$batch_callbacks = array( - 'activitypub_send_activity' => array( Dispatcher::class, 'send_to_followers' ), - 'activitypub_retry_activity' => array( Dispatcher::class, 'retry_send_to_followers' ), - ); - // Follower Cleanups. \add_action( 'activitypub_update_remote_actors', array( self::class, 'update_remote_actors' ) ); \add_action( 'activitypub_cleanup_remote_actors', array( self::class, 'cleanup_remote_actors' ) ); // Event callbacks. \add_action( 'activitypub_async_batch', array( self::class, 'async_batch' ), 10, 99 ); - \add_action( 'activitypub_send_activity', array( self::class, 'async_batch' ), 10, 3 ); - \add_action( 'activitypub_retry_activity', array( self::class, 'async_batch' ), 10, 3 ); \add_action( 'activitypub_reprocess_outbox', array( self::class, 'reprocess_outbox' ) ); \add_action( 'activitypub_outbox_purge', array( self::class, 'purge_outbox' ) ); @@ -74,6 +67,28 @@ public static function register_schedulers() { do_action( 'activitypub_register_schedulers' ); } + /** + * Register a batch callback for async processing. + * + * @param string $hook The cron event hook name. + * @param callable $callback The callback to execute. + */ + public static function register_async_batch_callback( $hook, $callback ) { + if ( \did_action( 'init' ) && ! \doing_action( 'init' ) ) { + \_doing_it_wrong( __METHOD__, 'Async batch callbacks should be registered before or during the init action.', 'unreleased' ); + return; + } + + if ( ! \is_callable( $callback ) ) { + return; + } + + self::$batch_callbacks[ $hook ] = $callback; + + // Register the WordPress action hook to trigger async_batch. + \add_action( $hook, array( self::class, 'async_batch' ), 10, 99 ); + } + /** * Schedule all ActivityPub schedules. */ @@ -336,7 +351,7 @@ public static function async_batch() { return; } - $key = \md5( \serialize( $args[0] ?? $args ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize + $key = \md5( \serialize( $callback ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize // Bail if the existing lock is still valid. if ( self::is_locked( $key ) ) { diff --git a/tests/includes/class-test-migration.php b/tests/includes/class-test-migration.php index 03e346790..c8e79ff2a 100644 --- a/tests/includes/class-test-migration.php +++ b/tests/includes/class-test-migration.php @@ -15,6 +15,7 @@ use Activitypub\Collection\Remote_Actors; use Activitypub\Comment; use Activitypub\Migration; +use Activitypub\Scheduler; /** * Test class for Activitypub Migrate. @@ -168,23 +169,6 @@ public function test_migrate_actor_mode() { $this->assertEquals( ACTIVITYPUB_ACTOR_MODE, \get_option( 'activitypub_actor_mode', ACTIVITYPUB_ACTOR_MODE ) ); } - /** - * Tests scheduling of migration. - * - * @covers ::maybe_migrate - */ - public function test_migration_scheduling() { - update_option( 'activitypub_db_version', '0.0.1' ); - - Migration::maybe_migrate(); - - $schedule = \wp_next_scheduled( 'activitypub_migrate', array( '0.0.1' ) ); - $this->assertNotFalse( $schedule ); - - // Clean up. - delete_option( 'activitypub_db_version' ); - } - /** * Test migrate to 4.1.0. * @@ -397,12 +381,12 @@ public function test_update_comment_counts_with_lock() { Comment::register_comment_types(); // Create test comments. - $post_id = $this->factory->post->create( + $post_id = self::factory()->post->create( array( 'post_author' => 1, ) ); - $comment_id = $this->factory->comment->create( + $comment_id = self::factory()->comment->create( array( 'comment_post_ID' => $post_id, 'comment_approved' => '1', @@ -420,41 +404,6 @@ public function test_update_comment_counts_with_lock() { wp_delete_post( $post_id, true ); } - /** - * Test update_comment_counts() with existing valid lock. - * - * @covers ::update_comment_counts - */ - public function test_update_comment_counts_with_existing_valid_lock() { - // Register comment types. - Comment::register_comment_types(); - - // Set a lock. - Migration::lock(); - - Migration::update_comment_counts( 10, 0 ); - - // Verify a scheduled event was created. - $next_scheduled = wp_next_scheduled( - 'activitypub_update_comment_counts', - array( - 'batch_size' => 10, - 'offset' => 0, - ) - ); - $this->assertNotFalse( $next_scheduled ); - - // Clean up. - delete_option( 'activitypub_migration_lock' ); - wp_clear_scheduled_hook( - 'activitypub_update_comment_counts', - array( - 'batch_size' => 10, - 'offset' => 0, - ) - ); - } - /** * Test create post outbox items. * @@ -526,43 +475,16 @@ public function test_create_outbox_items_batching() { $this->assertEquals( 5, count( $outbox_items ) ); } - /** - * Test async upgrade functionality. - * - * @covers ::async_upgrade - * @covers ::lock - * @covers ::unlock - * @covers ::create_post_outbox_items - */ - public function test_async_upgrade() { - // Test that lock prevents simultaneous upgrades. - Migration::lock(); - Migration::async_upgrade( 'create_post_outbox_items' ); - $scheduled = \wp_next_scheduled( 'activitypub_upgrade', array( 'create_post_outbox_items' ) ); - $this->assertNotFalse( $scheduled ); - Migration::unlock(); - - // Test scheduling next batch when callback returns more work. - Migration::async_upgrade( 'create_post_outbox_items', 1, 0 ); // Small batch size to force multiple batches. - $scheduled = \wp_next_scheduled( 'activitypub_upgrade', array( 'create_post_outbox_items', 1, 1 ) ); - $this->assertNotFalse( $scheduled ); - - // Test no scheduling when callback returns null (no more work). - Migration::async_upgrade( 'create_post_outbox_items', 100, 1000 ); // Large offset to ensure no posts found. - $this->assertFalse( - \wp_next_scheduled( 'activitypub_upgrade', array( 'create_post_outbox_items', 100, 1100 ) ) - ); - } - /** * Test async upgrade with multiple arguments. * - * @covers ::async_upgrade + * @covers ::update_comment_counts + * @covers \Activitypub\Scheduler::async_batch */ public function test_async_upgrade_multiple_args() { // Test that multiple arguments are passed correctly. - Migration::async_upgrade( 'update_comment_counts', 50, 100 ); - $scheduled = \wp_next_scheduled( 'activitypub_upgrade', array( 'update_comment_counts', 50, 150 ) ); + Scheduler::async_batch( array( Migration::class, 'update_comment_counts' ), 50, 100 ); + $scheduled = \wp_next_scheduled( 'activitypub_async_batch', array( array( Migration::class, 'update_comment_counts' ), 50, 150 ) ); $this->assertFalse( $scheduled, 'Should not schedule next batch when no comments found' ); } diff --git a/tests/includes/class-test-scheduler.php b/tests/includes/class-test-scheduler.php index 80af07ea9..e675bed90 100644 --- a/tests/includes/class-test-scheduler.php +++ b/tests/includes/class-test-scheduler.php @@ -12,7 +12,9 @@ use Activitypub\Collection\Actors; use Activitypub\Collection\Outbox; use Activitypub\Collection\Remote_Actors; +use Activitypub\Comment; use Activitypub\Dispatcher; +use Activitypub\Migration; use Activitypub\Scheduler; use function Activitypub\add_to_outbox; @@ -364,6 +366,69 @@ public function test_purge_outbox_with_different_purge_days() { $this->assertEquals( 0, wp_count_posts( Outbox::POST_TYPE )->publish ); } + /** + * Test update_comment_counts() with existing valid lock. + * + * @covers ::lock + * @covers ::async_batch + */ + public function test_update_comment_counts_with_existing_valid_lock() { + // Register comment types. + Comment::register_comment_types(); + + $callback = array( Migration::class, 'update_comment_counts' ); + $key = \md5( \serialize( $callback ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize + + // Set a lock. + Scheduler::lock( $key ); + + \do_action( 'activitypub_update_comment_counts', 10, 0 ); + + // Verify a scheduled event was created. + $next_scheduled = wp_next_scheduled( 'activitypub_update_comment_counts', array( 10, 0 ) ); + $this->assertNotFalse( $next_scheduled ); + + // Clean up. + delete_option( 'activitypub_migration_lock' ); + wp_clear_scheduled_hook( 'activitypub_update_comment_counts', array( 10, 0 ) ); + } + + /** + * Test async upgrade functionality. + * + * @covers ::async_batch + * @covers ::lock + * @covers ::unlock + */ + public function test_async_upgrade() { + $callback = array( Migration::class, 'create_post_outbox_items' ); + $key = \md5( \serialize( $callback ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize + + // Test that lock prevents simultaneous upgrades. + Scheduler::lock( $key ); + + \do_action( 'activitypub_create_post_outbox_items', 10, 0 ); + + $scheduled = \wp_next_scheduled( 'activitypub_create_post_outbox_items', array( 10, 0 ) ); + $this->assertNotFalse( $scheduled ); + Scheduler::unlock( $key ); + + \remove_action( 'transition_post_status', array( \Activitypub\Scheduler\Post::class, 'schedule_post_activity' ), 33 ); + self::factory()->post->create( array( 'meta_input' => array( 'activitypub_status' => 'federated' ) ) ); + \add_action( 'transition_post_status', array( \Activitypub\Scheduler\Post::class, 'schedule_post_activity' ), 33, 3 ); + + // Test scheduling next batch when callback returns more work. + \do_action( 'activitypub_create_post_outbox_items', 1, 0 ); // Small batch size to force multiple batches. + $scheduled = \wp_next_scheduled( 'activitypub_create_post_outbox_items', array( 1, 1 ) ); + $this->assertNotFalse( $scheduled ); + + // Test no scheduling when callback returns null (no more work). + \do_action( 'activitypub_create_post_outbox_items', 100, 1000 ); // Large offset to ensure no posts found. + $this->assertFalse( + \wp_next_scheduled( 'activitypub_create_post_outbox_items', array( 100, 1100 ) ) + ); + } + /** * Test async_batch method. * From c19e96e08e1c1c642a75d03cc3cc4c93c4bbcc73 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Wed, 24 Sep 2025 20:58:44 +0200 Subject: [PATCH 11/52] Register post types and meta on 'init' action (#2232) --- .github/changelog/2232-from-description | 4 ++++ includes/class-post-types.php | 16 ++++++++-------- tests/includes/class-test-post-types.php | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 .github/changelog/2232-from-description diff --git a/.github/changelog/2232-from-description b/.github/changelog/2232-from-description new file mode 100644 index 000000000..cbe318048 --- /dev/null +++ b/.github/changelog/2232-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed an issue where post metadata in the block editor was missing or failed to update. diff --git a/includes/class-post-types.php b/includes/class-post-types.php index d45ce83f2..b9994ec12 100644 --- a/includes/class-post-types.php +++ b/includes/class-post-types.php @@ -22,11 +22,11 @@ class Post_Types { * Initialize the class, registering all custom post types and post meta. */ public static function init() { - self::register_remote_actors_post_type(); - self::register_inbox_post_type(); - self::register_outbox_post_type(); - self::register_extra_fields_post_types(); - self::register_activitypub_post_meta(); + \add_action( 'init', array( self::class, 'register_remote_actors_post_type' ), 11 ); + \add_action( 'init', array( self::class, 'register_inbox_post_type' ), 11 ); + \add_action( 'init', array( self::class, 'register_outbox_post_type' ), 11 ); + \add_action( 'init', array( self::class, 'register_extra_fields_post_types' ), 11 ); + \add_action( 'init', array( self::class, 'register_activitypub_post_meta' ), 11 ); \add_action( 'rest_api_init', array( self::class, 'register_ap_actor_rest_field' ) ); @@ -529,13 +529,13 @@ public static function default_post_meta_data( $meta_value, $object_id, $meta_ke } // If meta value is already explicitly set, respect the author's choice. - if ( null !== $meta_value ) { + if ( $meta_value ) { return $meta_value; } // If the post is federated, return the default visibility. if ( 'federated' === \get_post_meta( $object_id, 'activitypub_status', true ) ) { - return null; + return $meta_value; } // If the post is not federated and older than a month, return local visibility. @@ -543,6 +543,6 @@ public static function default_post_meta_data( $meta_value, $object_id, $meta_ke return ACTIVITYPUB_CONTENT_VISIBILITY_LOCAL; } - return null; + return $meta_value; } } diff --git a/tests/includes/class-test-post-types.php b/tests/includes/class-test-post-types.php index 099c94655..2dbd20398 100644 --- a/tests/includes/class-test-post-types.php +++ b/tests/includes/class-test-post-types.php @@ -85,8 +85,8 @@ public function test_get_post_metadata() { // Test 5: When meta value is already set (not null), should respect author's explicit choice. \update_post_meta( $post_id, 'activitypub_status', 'pending' ); // Ensure not federated. - $result = Post_Types::default_post_meta_data( ACTIVITYPUB_CONTENT_VISIBILITY_PUBLIC, $post_id, 'activitypub_content_visibility' ); - $this->assertEquals( ACTIVITYPUB_CONTENT_VISIBILITY_PUBLIC, $result, 'Should respect explicitly set public visibility even for old unfederated posts.' ); + $result = Post_Types::default_post_meta_data( ACTIVITYPUB_CONTENT_VISIBILITY_QUIET_PUBLIC, $post_id, 'activitypub_content_visibility' ); + $this->assertEquals( ACTIVITYPUB_CONTENT_VISIBILITY_QUIET_PUBLIC, $result, 'Should respect explicitly set public visibility even for old unfederated posts.' ); // Test 6: Only apply local visibility when meta value is null (no explicit setting). $result = Post_Types::default_post_meta_data( null, $post_id, 'activitypub_content_visibility' ); From 2df8c074b2e139242d5ce392a9d8ca55b4e0fe53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Sep 2025 23:30:58 +0200 Subject: [PATCH 12/52] Bump tar-fs from 3.1.0 to 3.1.1 (#2234) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 081d26e21..54f418d96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23080,9 +23080,9 @@ } }, "node_modules/tar-fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.0.tgz", - "integrity": "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dev": true, "license": "MIT", "dependencies": { From 72d5fe8a2a8196a0b08599f7f86137d52833549a Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Thu, 25 Sep 2025 08:32:39 -0500 Subject: [PATCH 13/52] Enhance Jetpack integration for comment meta sync (#2233) --- .github/changelog/2233-from-description | 4 ++++ integration/class-jetpack.php | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 .github/changelog/2233-from-description diff --git a/.github/changelog/2233-from-description b/.github/changelog/2233-from-description new file mode 100644 index 000000000..105c2d8ad --- /dev/null +++ b/.github/changelog/2233-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Updated sync allowlist to add support for Jetpack notifications of likes and reposts. diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index 7893e5d34..cb937125c 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -21,6 +21,8 @@ class Jetpack { */ public static function init() { \add_filter( 'jetpack_sync_post_meta_whitelist', array( self::class, 'add_sync_meta' ) ); + \add_filter( 'jetpack_sync_comment_meta_whitelist', array( self::class, 'add_sync_comment_meta' ) ); + \add_filter( 'jetpack_sync_whitelisted_comment_types', array( self::class, 'add_comment_types' ) ); \add_filter( 'jetpack_json_api_comment_types', array( self::class, 'add_comment_types' ) ); \add_filter( 'jetpack_api_include_comment_types_count', array( self::class, 'add_comment_types' ) ); } @@ -39,6 +41,19 @@ public static function add_sync_meta( $allow_list ) { return $allow_list; } + /** + * Add ActivityPub comment meta keys to the Jetpack sync allow list. + * + * @param array $allow_list The Jetpack sync allow list. + * + * @return array The Jetpack sync allow list with ActivityPub comment meta keys. + */ + public static function add_sync_comment_meta( $allow_list ) { + $allow_list[] = 'avatar_url'; + + return $allow_list; + } + /** * Add custom comment types to the list of comment types. * @@ -46,6 +61,11 @@ public static function add_sync_meta( $allow_list ) { * @return array */ public static function add_comment_types( $comment_types ) { + // jetpack_sync_whitelisted_comment_types runs on plugins_loaded, before comment types are registered. + if ( 'jetpack_sync_whitelisted_comment_types' === current_filter() ) { + Comment::register_comment_types(); + } + return array_unique( \array_merge( $comment_types, Comment::get_comment_type_slugs() ) ); } } From c04be77795539e8892621cbda94a62f59adf7718 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Thu, 25 Sep 2025 15:49:35 +0200 Subject: [PATCH 14/52] Add health check for active Captcha plugins (#2231) --- .github/changelog/2231-from-description | 4 + includes/wp-admin/class-health-check.php | 76 ++++++ .../wp-admin/class-test-health-check.php | 223 ++++++++++++++++++ 3 files changed, 303 insertions(+) create mode 100644 .github/changelog/2231-from-description create mode 100644 tests/includes/wp-admin/class-test-health-check.php diff --git a/.github/changelog/2231-from-description b/.github/changelog/2231-from-description new file mode 100644 index 000000000..85cfaeba8 --- /dev/null +++ b/.github/changelog/2231-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +New site health check warns if active Captcha plugins may block ActivityPub comments. diff --git a/includes/wp-admin/class-health-check.php b/includes/wp-admin/class-health-check.php index 31233804b..874e95197 100644 --- a/includes/wp-admin/class-health-check.php +++ b/includes/wp-admin/class-health-check.php @@ -104,6 +104,11 @@ public static function add_tests( $tests ) { 'test' => array( self::class, 'test_pretty_permalinks' ), ); + $tests['direct']['activitypub_check_for_captcha_plugins'] = array( + 'label' => \__( 'Check for Captcha Plugins', 'activitypub' ), + 'test' => array( self::class, 'test_check_for_captcha_plugins' ), + ); + return $tests; } @@ -469,4 +474,75 @@ public static function test_pretty_permalinks() { return $result; } + + /** + * Check for Captcha Plugins. + * + * @return array The test result. + */ + public static function test_check_for_captcha_plugins() { + $result = array( + 'label' => \__( 'Check for Captcha Plugins', 'activitypub' ), + 'status' => 'good', + 'badge' => array( + 'label' => \__( 'ActivityPub', 'activitypub' ), + 'color' => 'green', + ), + 'description' => \sprintf( + '

%s

', + \__( 'No Captcha plugins were found that could interfere with ActivityPub functionality.', 'activitypub' ) + ), + 'actions' => '', + 'test' => 'test_check_for_captcha_plugins', + ); + + $active_plugins = (array) \get_option( 'active_plugins', array() ); + + // search for the word 'captcha' in the list of active plugins. + $captcha_plugins = array_filter( + $active_plugins, + function ( $plugin ) { + return \str_contains( strtolower( $plugin ), 'captcha' ); + } + ); + + if ( ! $captcha_plugins ) { + return $result; + } + + // Get nice plugin names instead of file paths using WordPress built-in functions. + $all_plugins = \get_plugins(); + $captcha_plugin_names = array_map( + function ( $plugin_file ) use ( $all_plugins ) { + if ( isset( $all_plugins[ $plugin_file ]['Name'] ) ) { + return $all_plugins[ $plugin_file ]['Name']; + } + return false; + }, + $captcha_plugins + ); + + $result['status'] = 'recommended'; + $result['label'] = \__( 'Captcha plugins detected', 'activitypub' ); + $result['badge']['color'] = 'orange'; + $result['description'] = \sprintf( + '

%s

%s

', + \sprintf( + /* translators: %s: List of captcha plugins. */ + \esc_html__( 'The following Captcha plugins are active and may interfere with ActivityPub functionality: %s', 'activitypub' ), + implode( ', ', array_map( 'esc_html', array_filter( $captcha_plugin_names ) ) ) + ), + \__( 'Captcha plugins require verification for comment submissions, but some may not distinguish between regular comments and those sent via an API (such as from ActivityPub). As a result, federated comments might be blocked because they cannot provide a Captcha response. If you experience missing comments, try disabling the Captcha plugin to determine if it resolves the issue.', 'activitypub' ) + ); + $result['actions'] = \sprintf( + '

%s

', + \sprintf( + // translators: %s: Plugin page URL. + \__( 'They can be disabled from the Plugin Page.', 'activitypub' ), + esc_url( admin_url( 'plugins.php?s=captcha&plugin_status=all' ) ) + ) + ); + + return $result; + } } diff --git a/tests/includes/wp-admin/class-test-health-check.php b/tests/includes/wp-admin/class-test-health-check.php new file mode 100644 index 000000000..64c55ac0d --- /dev/null +++ b/tests/includes/wp-admin/class-test-health-check.php @@ -0,0 +1,223 @@ +assertArrayHasKey( 'direct', $result ); + $this->assertArrayHasKey( 'activitypub_check_for_captcha_plugins', $result['direct'] ); + + // Verify test structure. + $captcha_test = $result['direct']['activitypub_check_for_captcha_plugins']; + $this->assertArrayHasKey( 'label', $captcha_test ); + $this->assertArrayHasKey( 'test', $captcha_test ); + $this->assertEquals( array( Health_Check::class, 'test_check_for_captcha_plugins' ), $captcha_test['test'] ); + } + + /** + * Mock function to return active plugins without captcha. + * + * @return array List of active plugins. + */ + public function mock_active_plugins_no_captcha() { + return array( 'some-other-plugin/plugin.php', 'another-plugin/main.php' ); + } + + /** + * Mock function to return active plugins with captcha. + * + * @return array List of active plugins. + */ + public function mock_active_plugins_with_captcha() { + return array( + 'really-simple-captcha/really-simple-captcha.php', + 'some-other-plugin/plugin.php', + 'recaptcha-for-woocommerce/recaptcha.php', + ); + } + + /** + * Mock function to return active plugins with mixed case captcha. + * + * @return array List of active plugins. + */ + public function mock_active_plugins_mixed_case() { + return array( + 'CAPTCHA-plugin/captcha.php', + 'some-plugin-with-CaPtChA/main.php', + 'regular-plugin/plugin.php', + ); + } + + /** + * Test captcha plugin detection when no captcha plugins are active. + */ + public function test_check_for_captcha_plugins_none_found() { + // Mock empty active plugins. + add_filter( + 'option_active_plugins', + array( $this, 'mock_active_plugins_no_captcha' ) + ); + + $result = Health_Check::test_check_for_captcha_plugins(); + + $this->assertEquals( 'good', $result['status'] ); + $this->assertEquals( 'Check for Captcha Plugins', $result['label'] ); + $this->assertEquals( 'green', $result['badge']['color'] ); + $this->assertStringContainsString( 'No Captcha plugins were found', $result['description'] ); + + remove_all_filters( 'option_active_plugins' ); + } + + /** + * Test captcha plugin detection when captcha plugins are found. + * This test focuses on the core detection logic rather than plugin name extraction. + */ + public function test_check_for_captcha_plugins_found() { + // Mock active plugins with captcha plugins. + add_filter( + 'option_active_plugins', + array( $this, 'mock_active_plugins_with_captcha' ) + ); + + $result = Health_Check::test_check_for_captcha_plugins(); + + // Test the core functionality - captcha plugins should be detected. + $this->assertEquals( 'recommended', $result['status'] ); + $this->assertEquals( 'Captcha plugins detected', $result['label'] ); + $this->assertEquals( 'orange', $result['badge']['color'] ); + $this->assertStringContainsString( 'The following Captcha plugins are active', $result['description'] ); + $this->assertStringContainsString( 'may interfere with ActivityPub functionality', $result['description'] ); + $this->assertStringContainsString( 'Plugin Page', $result['actions'] ); + + // Clean up. + remove_all_filters( 'option_active_plugins' ); + } + + /** + * Test captcha plugin detection with case-insensitive matching. + * This test focuses on the case-insensitive detection logic. + */ + public function test_check_for_captcha_plugins_case_insensitive() { + // Mock active plugins with mixed case captcha plugins. + add_filter( + 'option_active_plugins', + array( $this, 'mock_active_plugins_mixed_case' ) + ); + + $result = Health_Check::test_check_for_captcha_plugins(); + + // Test that case-insensitive matching works. + $this->assertEquals( 'recommended', $result['status'] ); + $this->assertEquals( 'Captcha plugins detected', $result['label'] ); + $this->assertEquals( 'orange', $result['badge']['color'] ); + + remove_all_filters( 'option_active_plugins' ); + } + + /** + * Test count_results method. + */ + public function test_count_results() { + // Test counting all results. + $all_results = Health_Check::count_results( 'all' ); + $this->assertIsArray( $all_results ); + $this->assertArrayHasKey( 'good', $all_results ); + $this->assertArrayHasKey( 'critical', $all_results ); + $this->assertArrayHasKey( 'recommended', $all_results ); + + // Test counting specific result types. + $good_count = Health_Check::count_results( 'good' ); + $this->assertIsInt( $good_count ); + + $critical_count = Health_Check::count_results( 'critical' ); + $this->assertIsInt( $critical_count ); + + $recommended_count = Health_Check::count_results( 'recommended' ); + $this->assertIsInt( $recommended_count ); + } + + /** + * Test that the actions link points to the correct plugin page. + * This test focuses on the action link generation. + */ + public function test_captcha_plugins_actions_link() { + // Mock active plugins with captcha plugin. + add_filter( + 'option_active_plugins', + array( $this, 'mock_active_plugins_with_captcha' ) + ); + + $result = Health_Check::test_check_for_captcha_plugins(); + + // Test that the actions contain the correct plugin management link. + // WordPress encodes & as & for security, so we check for the encoded version. + $this->assertStringContainsString( 'plugins.php?s=captcha&plugin_status=all', $result['actions'] ); + $this->assertStringContainsString( 'Plugin Page', $result['actions'] ); + + remove_all_filters( 'option_active_plugins' ); + } + + /** + * Test debug_information method includes ActivityPub fields. + */ + public function test_debug_information() { + $info = array(); + $result = Health_Check::debug_information( $info ); + + $this->assertArrayHasKey( 'activitypub', $result ); + $this->assertArrayHasKey( 'label', $result['activitypub'] ); + $this->assertArrayHasKey( 'fields', $result['activitypub'] ); + $this->assertEquals( 'ActivityPub', $result['activitypub']['label'] ); + } + + /** + * Test captcha plugin array filtering functionality. + * This tests the array_filter behavior used in the health check. + */ + public function test_captcha_plugin_array_filtering() { + // Test the array filtering used in the health check to remove empty plugin names. + $captcha_plugins = array( 'really-simple-captcha/captcha.php', 'another-captcha/main.php' ); + + // Simulate the array_filter operation from the health check. + $filtered_plugins = array_filter( + $captcha_plugins, + function ( $plugin ) { + return str_contains( strtolower( $plugin ), 'captcha' ); + } + ); + + $this->assertCount( 2, $filtered_plugins ); + $this->assertContains( 'really-simple-captcha/captcha.php', $filtered_plugins ); + $this->assertContains( 'another-captcha/main.php', $filtered_plugins ); + } + + /** + * Test that array_filter works correctly to remove false values. + */ + public function test_array_filter_removes_false_values() { + $plugin_names = array( 'Really Simple CAPTCHA', false, 'Another Plugin', false ); + $filtered = array_filter( $plugin_names ); + + $this->assertCount( 2, $filtered ); + $this->assertContains( 'Really Simple CAPTCHA', $filtered ); + $this->assertContains( 'Another Plugin', $filtered ); + $this->assertNotContains( false, $filtered ); + } +} From f69aa247e96e24d423be434bc70aeb2d968276fc Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Thu, 25 Sep 2025 15:56:14 +0200 Subject: [PATCH 15/52] Add `fetch_by_acct` and `fetch_by_various` methods to Remote_Actors (#2235) --- .github/changelog/2235-from-description | 4 + includes/collection/class-remote-actors.php | 62 ++++ includes/functions.php | 10 +- .../collection/class-test-remote-actors.php | 339 +++++++++++++++++- 4 files changed, 407 insertions(+), 8 deletions(-) create mode 100644 .github/changelog/2235-from-description diff --git a/.github/changelog/2235-from-description b/.github/changelog/2235-from-description new file mode 100644 index 000000000..82dc34bab --- /dev/null +++ b/.github/changelog/2235-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Added support for fetching actors by account identifiers and improved reliability of actor retrieval. diff --git a/includes/collection/class-remote-actors.php b/includes/collection/class-remote-actors.php index 5924ce425..4d4e823e9 100644 --- a/includes/collection/class-remote-actors.php +++ b/includes/collection/class-remote-actors.php @@ -202,6 +202,29 @@ public static function get_by_uri( $actor_uri ) { return \get_post( $post_id ); } + /** + * Fetch a remote actor post by either actor URI or acct, fetching from remote if not found locally. + * + * @param string $uri_or_acct The actor URI or acct identifier. + * + * @return \WP_Post|\WP_Error Post object or WP_Error if not found. + */ + public static function fetch_by_various( $uri_or_acct ) { + if ( \filter_var( $uri_or_acct, FILTER_VALIDATE_URL ) ) { + return self::fetch_by_uri( $uri_or_acct ); + } + + if ( preg_match( '/^@?' . ACTIVITYPUB_USERNAME_REGEXP . '$/i', $uri_or_acct ) ) { + return self::fetch_by_acct( $uri_or_acct ); + } + + return new \WP_Error( + 'activitypub_invalid_actor_identifier', + 'The actor identifier is not supported', + array( 'status' => 400 ) + ); + } + /** * Lookup a remote actor post by actor URI (guid), fetching from remote if not found locally. * @@ -239,6 +262,45 @@ public static function fetch_by_uri( $actor_uri ) { return \get_post( $post_id ); } + /** + * Fetch a remote actor post by acct, fetching from remote if not found locally. + * + * @param string $acct The acct identifier. + * + * @return \WP_Post|\WP_Error Post object or WP_Error if not found. + */ + public static function fetch_by_acct( $acct ) { + $acct = Sanitize::webfinger( $acct ); + + // Check local DB for acct post meta. + global $wpdb; + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $post_id = $wpdb->get_var( + $wpdb->prepare( + "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_activitypub_acct' AND meta_value=%s", + $acct + ) + ); + + if ( $post_id ) { + return \get_post( $post_id ); + } + + $profile_uri = Webfinger::resolve( $acct ); + + if ( \is_wp_error( $profile_uri ) ) { + return $profile_uri; + } + + $post = self::fetch_by_uri( $profile_uri ); + + if ( ! \is_wp_error( $post ) ) { + \update_post_meta( $post->ID, '_activitypub_acct', $acct ); + } + + return $post; + } + /** * Store an error that occurred when sending an ActivityPub message to a follower. * diff --git a/includes/functions.php b/includes/functions.php index 25e0f16f1..d4e0f0d74 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -85,7 +85,7 @@ function get_webfinger_resource( $user_id ) { * * @return array|\WP_Error The Actor profile as array or WP_Error on failure. */ -function get_remote_metadata_by_actor( $actor, $cached = true ) { +function get_remote_metadata_by_actor( $actor, $cached = true ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable, Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed /** * Filters the metadata before it is retrieved from a remote actor. * @@ -101,7 +101,13 @@ function get_remote_metadata_by_actor( $actor, $cached = true ) { return $pre; } - return Http::get_remote_object( $actor, $cached ); + $remote_actor = Remote_Actors::fetch_by_various( $actor ); + + if ( is_wp_error( $remote_actor ) ) { + return $remote_actor; + } + + return json_decode( $remote_actor->post_content, true ); } /** diff --git a/tests/includes/collection/class-test-remote-actors.php b/tests/includes/collection/class-test-remote-actors.php index 7b45ab73d..747aa2070 100644 --- a/tests/includes/collection/class-test-remote-actors.php +++ b/tests/includes/collection/class-test-remote-actors.php @@ -178,13 +178,13 @@ public function test_fetch_by_uri() { $id = Remote_Actors::create( $actor ); $this->assertNotWPError( $id ); - // Should find the actor locally. + // Test 1: Should find the actor locally. $post = Remote_Actors::fetch_by_uri( 'https://remote.example.com/actor/bob' ); - $this->assertInstanceOf( 'WP_Post', $post ); $this->assertEquals( 'https://remote.example.com/actor/bob', $post->guid ); + $this->assertEquals( $id, $post->ID ); - // Delete local post, mock remote fetch. + // Test 2: Delete local post, mock remote fetch. \wp_delete_post( $id ); add_filter( @@ -200,17 +200,344 @@ function ( $pre, $url_or_object ) use ( $actor ) { ); $post = Remote_Actors::fetch_by_uri( 'https://remote.example.com/actor/bob' ); - $this->assertInstanceOf( 'WP_Post', $post ); $this->assertEquals( 'https://remote.example.com/actor/bob', $post->guid ); remove_all_filters( 'activitypub_pre_http_get_remote_object' ); \wp_delete_post( $post->ID ); - // Should return WP_Error for invalid URI. - $not_found = Remote_Actors::fetch_by_uri( '' ); + // Test 3: Should return WP_Error for empty URI. + $empty_uri = Remote_Actors::fetch_by_uri( '' ); + $this->assertWPError( $empty_uri ); + + // Test 4: Should return WP_Error when remote fetch fails. + add_filter( + 'activitypub_pre_http_get_remote_object', + function () { + return new \WP_Error( 'http_request_failed', 'Request failed' ); + }, + 10, + 2 + ); + + $failed_fetch = Remote_Actors::fetch_by_uri( 'https://nonexistent.example.com/actor/missing' ); + $this->assertWPError( $failed_fetch ); + + // Test 5: Should return WP_Error when remote object is not an actor. + add_filter( + 'activitypub_pre_http_get_remote_object', + function () { + return array( + 'id' => 'https://remote.example.com/note/123', + 'type' => 'Note', + 'content' => 'This is not an actor', + ); + }, + 10, + 2 + ); + + $not_actor = Remote_Actors::fetch_by_uri( 'https://remote.example.com/note/123' ); + $this->assertWPError( $not_actor ); + $this->assertEquals( 'activitypub_no_actor', $not_actor->get_error_code() ); + + remove_all_filters( 'activitypub_pre_http_get_remote_object' ); + } + + /** + * Test fetch_by_various method. + * + * @covers ::fetch_by_various + */ + public function test_fetch_by_various() { + // Test 1: Valid URL should call fetch_by_uri. + $actor = array( + 'id' => 'https://remote.example.com/actor/charlie', + 'type' => 'Person', + 'url' => 'https://remote.example.com/actor/charlie', + 'inbox' => 'https://remote.example.com/actor/charlie/inbox', + 'name' => 'Charlie', + 'preferredUsername' => 'charlie', + 'endpoints' => array( + 'sharedInbox' => 'https://remote.example.com/inbox', + ), + ); + + $id = Remote_Actors::create( $actor ); + $this->assertNotWPError( $id ); + + $post = Remote_Actors::fetch_by_various( 'https://remote.example.com/actor/charlie' ); + $this->assertInstanceOf( 'WP_Post', $post ); + $this->assertEquals( 'https://remote.example.com/actor/charlie', $post->guid ); + + \wp_delete_post( $id ); + + // Test 2: Acct identifier should call fetch_by_acct. + // Mock webfinger resolution. + add_filter( + 'pre_http_request', + function ( $preempt, $parsed_args, $url ) { + if ( strpos( $url, '.well-known/webfinger' ) !== false ) { + return array( + 'response' => array( 'code' => 200 ), + 'body' => wp_json_encode( + array( + 'subject' => 'acct:charlie@remote.example.com', + 'links' => array( + array( + 'rel' => 'self', + 'type' => 'application/activity+json', + 'href' => 'https://remote.example.com/actor/charlie', + ), + ), + ) + ), + ); + } + return $preempt; + }, + 10, + 3 + ); + + add_filter( + 'activitypub_pre_http_get_remote_object', + function ( $pre, $url_or_object ) use ( $actor ) { + if ( $url_or_object === $actor['id'] ) { + return $actor; + } + return $pre; + }, + 10, + 2 + ); + + $post = Remote_Actors::fetch_by_various( 'charlie@remote.example.com' ); + $this->assertInstanceOf( 'WP_Post', $post ); + $this->assertEquals( 'https://remote.example.com/actor/charlie', $post->guid ); + + // Verify acct meta was stored. + $stored_acct = \get_post_meta( $post->ID, '_activitypub_acct', true ); + $this->assertEquals( 'charlie@remote.example.com', $stored_acct ); + + remove_all_filters( 'pre_http_request' ); + remove_all_filters( 'activitypub_pre_http_get_remote_object' ); + \wp_delete_post( $post->ID ); + + // Test 3: Invalid input returns WP_Error. + $invalid = Remote_Actors::fetch_by_various( '' ); + $this->assertWPError( $invalid ); + + // Test 4: URL without scheme. + $no_scheme = Remote_Actors::fetch_by_various( 'example.com/actor/test' ); + $this->assertWPError( $no_scheme ); + + // Test 5: Malformed acct. + $malformed_acct = Remote_Actors::fetch_by_various( 'not-an-email-or-url' ); + $this->assertWPError( $malformed_acct ); + } + + /** + * Test fetch_by_acct method. + * + * @covers ::fetch_by_acct + */ + public function test_fetch_by_acct() { + // Test 1: Find existing actor by acct meta. + $actor = array( + 'id' => 'https://remote.example.com/actor/diana', + 'type' => 'Person', + 'url' => 'https://remote.example.com/actor/diana', + 'inbox' => 'https://remote.example.com/actor/diana/inbox', + 'name' => 'Diana', + 'preferredUsername' => 'diana', + 'endpoints' => array( + 'sharedInbox' => 'https://remote.example.com/inbox', + ), + ); + + $id = Remote_Actors::create( $actor ); + $this->assertNotWPError( $id ); + \update_post_meta( $id, '_activitypub_acct', 'diana@remote.example.com' ); + + $post = Remote_Actors::fetch_by_acct( 'diana@remote.example.com' ); + $this->assertInstanceOf( 'WP_Post', $post ); + $this->assertEquals( $id, $post->ID ); + + \wp_delete_post( $id ); + + // Test 2: Webfinger resolution and remote fetch. + add_filter( + 'pre_http_request', + function ( $preempt, $parsed_args, $url ) { + if ( strpos( $url, '.well-known/webfinger' ) !== false ) { + return array( + 'response' => array( 'code' => 200 ), + 'body' => wp_json_encode( + array( + 'subject' => 'acct:diana@remote.example.com', + 'links' => array( + array( + 'rel' => 'self', + 'type' => 'application/activity+json', + 'href' => 'https://remote.example.com/actor/diana', + ), + ), + ) + ), + ); + } + return $preempt; + }, + 10, + 3 + ); + + add_filter( + 'activitypub_pre_http_get_remote_object', + function ( $pre, $url_or_object ) use ( $actor ) { + if ( $url_or_object === $actor['id'] ) { + return $actor; + } + return $pre; + }, + 10, + 2 + ); + + $post = Remote_Actors::fetch_by_acct( 'diana@remote.example.com' ); + $this->assertInstanceOf( 'WP_Post', $post ); + $this->assertEquals( 'https://remote.example.com/actor/diana', $post->guid ); + + // Verify acct meta was stored after remote fetch. + $stored_acct = \get_post_meta( $post->ID, '_activitypub_acct', true ); + $this->assertEquals( 'diana@remote.example.com', $stored_acct ); + + \wp_delete_post( $post->ID ); + remove_all_filters( 'pre_http_request' ); + remove_all_filters( 'activitypub_pre_http_get_remote_object' ); + + // Test 3: Webfinger resolution failure. + add_filter( + 'pre_http_request', + function ( $preempt, $parsed_args, $url ) { + if ( strpos( $url, '.well-known/webfinger' ) !== false ) { + return array( + 'response' => array( 'code' => 404 ), + 'body' => 'Not Found', + ); + } + return $preempt; + }, + 10, + 3 + ); + $not_found = Remote_Actors::fetch_by_acct( 'notfound@example.com' ); $this->assertWPError( $not_found ); + + remove_all_filters( 'pre_http_request' ); + + // Test 4: Invalid acct format. + $invalid = Remote_Actors::fetch_by_acct( 'invalid-acct-format' ); + $this->assertWPError( $invalid ); + + // Test 5: Empty acct. + $empty = Remote_Actors::fetch_by_acct( '' ); + $this->assertWPError( $empty ); + + // Test 6: Acct sanitization (with @acct: prefix). + add_filter( + 'pre_http_request', + function ( $preempt, $parsed_args, $url ) { + if ( strpos( $url, '.well-known/webfinger' ) !== false ) { + return array( + 'response' => array( 'code' => 200 ), + 'body' => wp_json_encode( + array( + 'subject' => 'acct:diana@remote.example.com', + 'links' => array( + array( + 'rel' => 'self', + 'type' => 'application/activity+json', + 'href' => 'https://remote.example.com/actor/diana', + ), + ), + ) + ), + ); + } + return $preempt; + }, + 10, + 3 + ); + + add_filter( + 'activitypub_pre_http_get_remote_object', + function ( $pre, $url_or_object ) use ( $actor ) { + if ( $url_or_object === $actor['id'] ) { + return $actor; + } + return $pre; + }, + 10, + 2 + ); + + // Test with @acct: prefix - should be sanitized. + $post = Remote_Actors::fetch_by_acct( '@acct:diana@remote.example.com' ); + $this->assertInstanceOf( 'WP_Post', $post ); + + // Verify acct was properly sanitized and stored. + $stored_acct = \get_post_meta( $post->ID, '_activitypub_acct', true ); + $this->assertEquals( 'diana@remote.example.com', $stored_acct ); + + \wp_delete_post( $post->ID ); + remove_all_filters( 'pre_http_request' ); + remove_all_filters( 'activitypub_pre_http_get_remote_object' ); + + // Test 7: Webfinger succeeds but remote fetch fails. + add_filter( + 'pre_http_request', + function ( $preempt, $parsed_args, $url ) { + if ( strpos( $url, '.well-known/webfinger' ) !== false ) { + return array( + 'response' => array( 'code' => 200 ), + 'body' => wp_json_encode( + array( + 'subject' => 'acct:broken@remote.example.com', + 'links' => array( + array( + 'rel' => 'self', + 'type' => 'application/activity+json', + 'href' => 'https://broken.example.com/actor/broken', + ), + ), + ) + ), + ); + } + return $preempt; + }, + 10, + 3 + ); + + add_filter( + 'activitypub_pre_http_get_remote_object', + function () { + return new \WP_Error( 'http_request_failed', 'Actor fetch failed' ); + }, + 10, + 2 + ); + + $fetch_failed = Remote_Actors::fetch_by_acct( 'broken@remote.example.com' ); + $this->assertWPError( $fetch_failed ); + + remove_all_filters( 'pre_http_request' ); + remove_all_filters( 'activitypub_pre_http_get_remote_object' ); } /** From c108c36de5cb7741ccfef57e0f1005e069ecd379 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Mon, 29 Sep 2025 07:42:56 -0500 Subject: [PATCH 16/52] Add init check to get_comment_type_slugs (#2237) --- includes/class-comment.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/includes/class-comment.php b/includes/class-comment.php index d8ca2591c..a02599b7a 100644 --- a/includes/class-comment.php +++ b/includes/class-comment.php @@ -560,6 +560,12 @@ public static function is_registered_comment_type( $slug ) { * @return array The registered custom comment type slugs. */ public static function get_comment_type_slugs() { + if ( ! did_action( 'init' ) ) { + _doing_it_wrong( __METHOD__, 'This function should not be called before the init action has run. Comment types are only available after init.', 'unreleased' ); + + return array(); + } + return array_keys( self::get_comment_types() ); } From 738954c7f55d93e32714e2f61b0ed2a7a0a6a9ea Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Mon, 29 Sep 2025 14:56:29 +0200 Subject: [PATCH 17/52] Prevent PHP Warning (#2238) --- includes/functions.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/includes/functions.php b/includes/functions.php index d4e0f0d74..2b45c38c9 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -987,7 +987,12 @@ function get_comment_ancestors( $comment ) { $ancestors[] = $id; while ( $id > 0 ) { - $ancestor = \get_comment( $id ); + $ancestor = \get_comment( $id ); + + if ( ! $ancestor ) { + break; + } + $parent_id = (int) $ancestor->comment_parent; // Loop detection: If the ancestor has been seen before, break. From 512dcbe7a7ae625e7f0ed564f4bf118e24904e02 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 07:12:43 +0200 Subject: [PATCH 18/52] Add row action filters and Jetpack Reader link integration (#2241) --- .github/changelog/2241-from-description | 4 + includes/wp-admin/class-admin.php | 1 + .../wp-admin/table/class-blocked-actors.php | 13 + includes/wp-admin/table/class-followers.php | 14 + includes/wp-admin/table/class-following.php | 13 + integration/class-jetpack.php | 63 ++- integration/load.php | 2 +- tests/integration/class-test-jetpack.php | 383 ++++++++++++++++++ 8 files changed, 487 insertions(+), 6 deletions(-) create mode 100644 .github/changelog/2241-from-description create mode 100644 tests/integration/class-test-jetpack.php diff --git a/.github/changelog/2241-from-description b/.github/changelog/2241-from-description new file mode 100644 index 000000000..7d4e76945 --- /dev/null +++ b/.github/changelog/2241-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +You can now follow people and see their updates right in the WordPress.com Reader when using Jetpack or WordPress.com. diff --git a/includes/wp-admin/class-admin.php b/includes/wp-admin/class-admin.php index 162d97747..44e9876f2 100644 --- a/includes/wp-admin/class-admin.php +++ b/includes/wp-admin/class-admin.php @@ -82,6 +82,7 @@ public static function init() { */ public static function admin_notices() { $current_screen = get_current_screen(); + if ( ! $current_screen ) { return; } diff --git a/includes/wp-admin/table/class-blocked-actors.php b/includes/wp-admin/table/class-blocked-actors.php index ba5279d31..4b861eb87 100644 --- a/includes/wp-admin/table/class-blocked-actors.php +++ b/includes/wp-admin/table/class-blocked-actors.php @@ -397,6 +397,19 @@ protected function handle_row_actions( $item, $column_name, $primary ) { ), ); + /** + * Filters the array of row action links on the Blocked Actors list table. + * + * This filter is evaluated for each blocked actor item in the list table. + * + * @since unreleased + * + * @param string[] $actions An array of row action links. Defaults are + * 'Unblock'. + * @param array $item The current blocked actor item. + */ + $actions = apply_filters( 'activitypub_blocked_actors_row_actions', $actions, $item ); + return $this->row_actions( $actions ); } } diff --git a/includes/wp-admin/table/class-followers.php b/includes/wp-admin/table/class-followers.php index f726bca9c..2447957a6 100644 --- a/includes/wp-admin/table/class-followers.php +++ b/includes/wp-admin/table/class-followers.php @@ -477,6 +477,20 @@ protected function handle_row_actions( $item, $column_name, $primary ) { } } + /** + * Filters the array of row action links for each follower in the Followers list table. + * + * This filter allows you to modify the available row actions (such as Delete, Block, or Follow back) + * for each follower item displayed in the table. + * + * @since unreleased + * + * @param string[] $actions An array of row action links. Defaults are + * 'Delete', 'Block', and optionally 'Follow back'. + * @param array $item The current follower item. + */ + $actions = apply_filters( 'activitypub_followers_row_actions', $actions, $item ); + return $this->row_actions( $actions ); } diff --git a/includes/wp-admin/table/class-following.php b/includes/wp-admin/table/class-following.php index bf2c931a7..df38651c8 100644 --- a/includes/wp-admin/table/class-following.php +++ b/includes/wp-admin/table/class-following.php @@ -481,6 +481,7 @@ public function single_row( $item ) { * @param array $item The current following item. * @param string $column_name The current column name. * @param string $primary The primary column name. + * * @return string HTML for the row actions. */ protected function handle_row_actions( $item, $column_name, $primary ) { @@ -498,6 +499,18 @@ protected function handle_row_actions( $item, $column_name, $primary ) { ), ); + /** + * Filters the array of row action links on the Following list table. + * + * This filter allows you to modify the row actions for each following item in the Following list table. + * + * @since unreleased + * + * @param string[] $actions An array of row action links. Defaults include 'Unfollow'. + * @param array $item The current following item. + */ + $actions = apply_filters( 'activitypub_following_row_actions', $actions, $item ); + return $this->row_actions( $actions ); } } diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index cb937125c..2ed7f5940 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -20,11 +20,21 @@ class Jetpack { * Initialize the class, registering WordPress hooks. */ public static function init() { - \add_filter( 'jetpack_sync_post_meta_whitelist', array( self::class, 'add_sync_meta' ) ); - \add_filter( 'jetpack_sync_comment_meta_whitelist', array( self::class, 'add_sync_comment_meta' ) ); - \add_filter( 'jetpack_sync_whitelisted_comment_types', array( self::class, 'add_comment_types' ) ); - \add_filter( 'jetpack_json_api_comment_types', array( self::class, 'add_comment_types' ) ); - \add_filter( 'jetpack_api_include_comment_types_count', array( self::class, 'add_comment_types' ) ); + if ( ! \defined( 'IS_WPCOM' ) ) { + \add_filter( 'jetpack_sync_post_meta_whitelist', array( self::class, 'add_sync_meta' ) ); + \add_filter( 'jetpack_sync_comment_meta_whitelist', array( self::class, 'add_sync_comment_meta' ) ); + \add_filter( 'jetpack_sync_whitelisted_comment_types', array( self::class, 'add_comment_types' ) ); + \add_filter( 'jetpack_json_api_comment_types', array( self::class, 'add_comment_types' ) ); + \add_filter( 'jetpack_api_include_comment_types_count', array( self::class, 'add_comment_types' ) ); + } + + if ( + ( \defined( 'IS_WPCOM' ) && IS_WPCOM ) || + ( \class_exists( '\Jetpack' ) && \Jetpack::is_connection_ready() ) + ) { + \add_filter( 'activitypub_following_row_actions', array( self::class, 'add_reader_link' ), 10, 2 ); + \add_filter( 'pre_option_activitypub_following_ui', array( self::class, 'pre_option_activitypub_following_ui' ) ); + } } /** @@ -68,4 +78,47 @@ public static function add_comment_types( $comment_types ) { return array_unique( \array_merge( $comment_types, Comment::get_comment_type_slugs() ) ); } + + /** + * Add a "Reader" link to the bulk actions dropdown on the following list screen. + * + * @param array $actions The bulk actions. + * @param array $item The current following item. + * + * @return array The bulk actions with the "Reader" link. + */ + public static function add_reader_link( $actions, $item ) { + // Do not show the link for pending follow requests. + if ( 'pending' === $item['status'] ) { + return $actions; + } + + $feed = \get_post_meta( $item['id'], '_activitypub_actor_feed', true ); + + if ( isset( $feed['feed_id'] ) ) { + $url = sprintf( 'https://wordpress.com/reader/feed/%d', (int) $feed['feed_id'] ); + } else { + $url = sprintf( 'https://wordpress.com/reader/feeds/lookup/%s', rawurlencode( $item['identifier'] ) ); + } + + return array_merge( + array( + 'reader' => sprintf( + '%s', + esc_url( $url ), + esc_html__( 'View Feed', 'activitypub' ) + ), + ), + $actions + ); + } + + /** + * Force the ActivityPub Following UI to be enabled when Jetpack is active. + * + * @return string '1' to enable the ActivityPub Following UI. + */ + public static function pre_option_activitypub_following_ui() { + return '1'; + } } diff --git a/integration/load.php b/integration/load.php index 627b33cc3..12861374b 100644 --- a/integration/load.php +++ b/integration/load.php @@ -62,7 +62,7 @@ function plugin_init() { * * @see https://jetpack.com/ */ - if ( \defined( 'JETPACK__VERSION' ) && ! \defined( 'IS_WPCOM' ) ) { + if ( \defined( 'JETPACK__VERSION' ) ) { Jetpack::init(); } diff --git a/tests/integration/class-test-jetpack.php b/tests/integration/class-test-jetpack.php new file mode 100644 index 000000000..0d569b47b --- /dev/null +++ b/tests/integration/class-test-jetpack.php @@ -0,0 +1,383 @@ +user->create( + array( + 'role' => 'author', + ) + ); + + self::$post_id = $factory->post->create( + array( + 'post_author' => self::$user_id, + 'post_content' => 'Test post content', + 'post_title' => 'Test Post', + 'post_status' => 'publish', + ) + ); + } + + /** + * Clean up after tests. + */ + public function tear_down() { + // Remove any filters that may have been added during tests. + remove_all_filters( 'jetpack_sync_post_meta_whitelist' ); + remove_all_filters( 'jetpack_sync_comment_meta_whitelist' ); + remove_all_filters( 'jetpack_sync_whitelisted_comment_types' ); + remove_all_filters( 'jetpack_json_api_comment_types' ); + remove_all_filters( 'jetpack_api_include_comment_types_count' ); + remove_all_filters( 'activitypub_following_row_actions' ); + remove_all_filters( 'pre_option_activitypub_following_ui' ); + + parent::tear_down(); + } + + /** + * Test init method registers sync hooks correctly. + * + * @covers ::init + */ + public function test_init_registers_sync_hooks() { + // Ensure hooks are not already registered. + $this->assertFalse( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); + + // Initialize Jetpack integration. + Jetpack::init(); + + // Check that sync hooks are registered (when not on WordPress.com). + $this->assertTrue( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); + $this->assertTrue( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); + $this->assertTrue( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); + $this->assertTrue( has_filter( 'jetpack_json_api_comment_types' ) ); + $this->assertTrue( has_filter( 'jetpack_api_include_comment_types_count' ) ); + } + + /** + * Test that following UI hooks are not registered without proper conditions. + * + * @covers ::init + */ + public function test_init_skips_following_ui_hooks_without_conditions() { + // Ensure hooks are not already registered. + $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); + + // Initialize Jetpack integration. + Jetpack::init(); + + // Following UI hooks should NOT be registered in test environment + // because neither IS_WPCOM is defined nor is Jetpack connected. + $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); + } + + /** + * Test init method skips sync hooks when IS_WPCOM is defined. + * + * @covers ::init + * @runInSeparateProcess + * @preserveGlobalState disabled + */ + public function test_init_skips_sync_hooks_on_wpcom() { + // Clear any existing hooks first. + remove_all_filters( 'jetpack_sync_post_meta_whitelist' ); + remove_all_filters( 'jetpack_sync_comment_meta_whitelist' ); + remove_all_filters( 'jetpack_sync_whitelisted_comment_types' ); + remove_all_filters( 'jetpack_json_api_comment_types' ); + remove_all_filters( 'jetpack_api_include_comment_types_count' ); + remove_all_filters( 'activitypub_following_row_actions' ); + remove_all_filters( 'pre_option_activitypub_following_ui' ); + + // Test the normal case first (IS_WPCOM not defined). + if ( ! defined( 'IS_WPCOM' ) ) { + Jetpack::init(); + + // Sync hooks should be registered when IS_WPCOM is not defined. + $this->assertTrue( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); + $this->assertTrue( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); + $this->assertTrue( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); + $this->assertTrue( has_filter( 'jetpack_json_api_comment_types' ) ); + $this->assertTrue( has_filter( 'jetpack_api_include_comment_types_count' ) ); + + // Following UI hooks should NOT be registered in normal test environment. + $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); + + // Clear hooks again for the WPCOM simulation. + remove_all_filters( 'jetpack_sync_post_meta_whitelist' ); + remove_all_filters( 'jetpack_sync_comment_meta_whitelist' ); + remove_all_filters( 'jetpack_sync_whitelisted_comment_types' ); + remove_all_filters( 'jetpack_json_api_comment_types' ); + remove_all_filters( 'jetpack_api_include_comment_types_count' ); + remove_all_filters( 'activitypub_following_row_actions' ); + remove_all_filters( 'pre_option_activitypub_following_ui' ); + } + + // Now simulate IS_WPCOM behavior by defining the constant temporarily. + // We use a runInSeparateProcess annotation to isolate this test. + if ( ! defined( 'IS_WPCOM' ) ) { + define( 'IS_WPCOM', true ); + } + + Jetpack::init(); + + // When IS_WPCOM is defined, sync hooks should NOT be registered. + $this->assertFalse( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); + $this->assertFalse( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); + $this->assertFalse( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); + $this->assertFalse( has_filter( 'jetpack_json_api_comment_types' ) ); + $this->assertFalse( has_filter( 'jetpack_api_include_comment_types_count' ) ); + + // But following UI hooks should be registered when IS_WPCOM is true. + $this->assertTrue( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertTrue( has_filter( 'pre_option_activitypub_following_ui' ) ); + } + + /** + * Test add_sync_meta method adds ActivityPub meta keys. + * + * @covers ::add_sync_meta + */ + public function test_add_sync_meta() { + $original_list = array( 'existing_meta_key' ); + + $updated_list = Jetpack::add_sync_meta( $original_list ); + + // Check that original keys are preserved. + $this->assertContains( 'existing_meta_key', $updated_list ); + + // Check that ActivityPub meta keys are added. + $this->assertContains( Followers::FOLLOWER_META_KEY, $updated_list ); + $this->assertContains( Following::FOLLOWING_META_KEY, $updated_list ); + } + + /** + * Test add_sync_comment_meta method adds ActivityPub comment meta keys. + * + * @covers ::add_sync_comment_meta + */ + public function test_add_sync_comment_meta() { + $original_list = array( 'existing_comment_meta' ); + + $updated_list = Jetpack::add_sync_comment_meta( $original_list ); + + // Check that original keys are preserved. + $this->assertContains( 'existing_comment_meta', $updated_list ); + + // Check that ActivityPub comment meta keys are added. + $this->assertContains( 'avatar_url', $updated_list ); + } + + /** + * Test add_comment_types method adds ActivityPub comment types. + * + * @covers ::add_comment_types + */ + public function test_add_comment_types() { + $original_types = array( 'comment', 'pingback', 'trackback' ); + + $updated_types = Jetpack::add_comment_types( $original_types ); + + // Check that original types are preserved. + $this->assertContains( 'comment', $updated_types ); + $this->assertContains( 'pingback', $updated_types ); + $this->assertContains( 'trackback', $updated_types ); + + // Check that ActivityPub comment types are added. + $expected_ap_types = Comment::get_comment_type_slugs(); + foreach ( $expected_ap_types as $type ) { + $this->assertContains( $type, $updated_types ); + } + + // Check that duplicates are removed. + $this->assertEquals( $updated_types, array_unique( $updated_types ) ); + } + + /** + * Data provider for Reader link test scenarios. + * + * @return array Test cases with different following item configurations. + */ + public function reader_link_data() { + return array( + 'active following with feed ID' => array( + 'item' => array( + 'id' => 123, + 'status' => 'active', + 'identifier' => 'https://example.com/feed', + ), + 'feed_id' => 456, + 'expected_url' => 'https://wordpress.com/reader/feed/456', + 'should_have_reader_link' => true, + ), + 'active following without feed ID' => array( + 'item' => array( + 'id' => 123, + 'status' => 'active', + 'identifier' => 'https://example.com/feed', + ), + 'feed_id' => false, + 'expected_url' => 'https://wordpress.com/reader/feeds/lookup/https%3A%2F%2Fexample.com%2Ffeed', + 'should_have_reader_link' => true, + ), + 'pending following should not have reader link' => array( + 'item' => array( + 'id' => 123, + 'status' => 'pending', + 'identifier' => 'https://example.com/feed', + ), + 'feed_id' => 456, + 'expected_url' => null, + 'should_have_reader_link' => false, + ), + ); + } + + /** + * Test add_reader_link method adds correct Reader links. + * + * @dataProvider reader_link_data + * @covers ::add_reader_link + * + * @param array $item The following item. + * @param int|false $feed_id The feed ID or false. + * @param string|null $expected_url Expected URL or null. + * @param bool $should_have_reader_link Whether reader link should be added. + */ + public function test_add_reader_link( $item, $feed_id, $expected_url, $should_have_reader_link ) { + $original_actions = array( 'edit' => 'Edit' ); + + // Mock the feed ID meta if provided. + if ( false !== $feed_id ) { + add_filter( + 'get_post_metadata', + function ( $value, $object_id, $meta_key ) use ( $item, $feed_id ) { + if ( $object_id === $item['id'] && '_activitypub_actor_feed' === $meta_key ) { + // Return as array of values (WordPress expects this format). + return array( array( 'feed_id' => $feed_id ) ); + } + return $value; + }, + 10, + 3 + ); + } + + $updated_actions = Jetpack::add_reader_link( $original_actions, $item ); + + // Check that original actions are preserved. + $this->assertArrayHasKey( 'edit', $updated_actions ); + + if ( $should_have_reader_link ) { + // Check that reader link is added. + $this->assertArrayHasKey( 'reader', $updated_actions ); + $this->assertStringContainsString( $expected_url, $updated_actions['reader'] ); + $this->assertStringContainsString( 'View Feed', $updated_actions['reader'] ); + $this->assertStringContainsString( 'target="_blank"', $updated_actions['reader'] ); + } else { + // Check that reader link is not added for pending items. + $this->assertArrayNotHasKey( 'reader', $updated_actions ); + } + + // Clean up filters. + remove_all_filters( 'get_post_metadata' ); + } + + /** + * Test pre_option_activitypub_following_ui method forces UI to be enabled. + * + * @covers ::pre_option_activitypub_following_ui + */ + public function test_pre_option_activitypub_following_ui() { + $result = Jetpack::pre_option_activitypub_following_ui(); + + $this->assertEquals( '1', $result ); + } + + /** + * Test integration with actual WordPress filters. + */ + public function test_filter_integration() { + // Initialize Jetpack integration. + Jetpack::init(); + + // Test sync meta filter integration (only if not on WordPress.com). + if ( ! defined( 'IS_WPCOM' ) ) { + $sync_meta = apply_filters( 'jetpack_sync_post_meta_whitelist', array() ); + $this->assertContains( Followers::FOLLOWER_META_KEY, $sync_meta ); + $this->assertContains( Following::FOLLOWING_META_KEY, $sync_meta ); + + // Test comment meta filter integration. + $comment_meta = apply_filters( 'jetpack_sync_comment_meta_whitelist', array() ); + $this->assertContains( 'avatar_url', $comment_meta ); + + // Test comment types filter integration. + $comment_types = apply_filters( 'jetpack_sync_whitelisted_comment_types', array() ); + $expected_ap_types = Comment::get_comment_type_slugs(); + foreach ( $expected_ap_types as $type ) { + $this->assertContains( $type, $comment_types ); + } + } else { + // On WordPress.com, sync filters should not be registered. + // Test that they are indeed not registered. + $sync_meta = apply_filters( 'jetpack_sync_post_meta_whitelist', array() ); + $this->assertNotContains( Followers::FOLLOWER_META_KEY, $sync_meta ); + $this->assertNotContains( Following::FOLLOWING_META_KEY, $sync_meta ); + + $comment_meta = apply_filters( 'jetpack_sync_comment_meta_whitelist', array() ); + $this->assertNotContains( 'avatar_url', $comment_meta ); + } + + // Test following UI filter integration - test direct method calls. + $ui_result = Jetpack::pre_option_activitypub_following_ui(); + $this->assertEquals( '1', $ui_result ); + + // Test reader link method directly. + $test_item = array( + 'id' => 123, + 'status' => 'active', + 'identifier' => 'https://example.com/feed', + ); + $original_actions = array( 'edit' => 'Edit' ); + $updated_actions = Jetpack::add_reader_link( $original_actions, $test_item ); + $this->assertArrayHasKey( 'reader', $updated_actions ); + } +} From 2faaaab6bc9cea730e19aa746961202c032ce7b7 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 15:24:36 +0200 Subject: [PATCH 19/52] Move routing logic to new Router class (#2245) --- activitypub.php | 1 + includes/class-activitypub.php | 272 +-------------------- includes/class-router.php | 282 ++++++++++++++++++++++ tests/includes/class-test-activitypub.php | 219 +---------------- tests/includes/class-test-router.php | 241 ++++++++++++++++++ 5 files changed, 537 insertions(+), 478 deletions(-) create mode 100644 includes/class-router.php create mode 100644 tests/includes/class-test-router.php diff --git a/activitypub.php b/activitypub.php index b15eedc35..ce6c3e29c 100644 --- a/activitypub.php +++ b/activitypub.php @@ -81,6 +81,7 @@ function plugin_init() { \add_action( 'init', array( __NAMESPACE__ . '\Move', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Options', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Post_Types', 'init' ) ); + \add_action( 'init', array( __NAMESPACE__ . '\Router', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Search', 'init' ) ); \add_action( 'init', array( __NAMESPACE__ . '\Signature', 'init' ) ); diff --git a/includes/class-activitypub.php b/includes/class-activitypub.php index d2af98adb..3bc36a361 100644 --- a/includes/class-activitypub.php +++ b/includes/class-activitypub.php @@ -7,10 +7,8 @@ namespace Activitypub; -use Activitypub\Collection\Actors; use Activitypub\Collection\Followers; use Activitypub\Collection\Following; -use Activitypub\Collection\Outbox; /** * ActivityPub Class. @@ -22,15 +20,9 @@ class Activitypub { * Initialize the class, registering WordPress hooks. */ public static function init() { - \add_action( 'init', array( self::class, 'add_rewrite_rules' ), 11 ); \add_action( 'init', array( self::class, 'theme_compat' ), 11 ); \add_action( 'init', array( self::class, 'register_user_meta' ), 11 ); - \add_filter( 'template_include', array( self::class, 'render_activitypub_template' ), 99 ); - \add_action( 'template_redirect', array( self::class, 'template_redirect' ) ); - \add_filter( 'redirect_canonical', array( self::class, 'redirect_canonical' ), 10, 2 ); - \add_filter( 'redirect_canonical', array( self::class, 'no_trailing_redirect' ), 10, 2 ); - \add_filter( 'query_vars', array( self::class, 'add_query_vars' ) ); \add_filter( 'pre_get_avatar_data', array( self::class, 'pre_get_avatar_data' ), 11, 2 ); \add_action( 'wp_trash_post', array( self::class, 'trash_post' ), 1 ); @@ -98,227 +90,6 @@ public static function uninstall() { Options::delete(); } - /** - * Return a AS2 JSON version of an author, post or page. - * - * @param string $template The path to the template object. - * - * @return string The new path to the JSON template. - */ - public static function render_activitypub_template( $template ) { - if ( \wp_is_serving_rest_request() || \wp_doing_ajax() ) { - return $template; - } - - self::add_headers(); - - if ( ! is_activitypub_request() || ! should_negotiate_content() ) { - if ( \get_query_var( 'p' ) && Outbox::POST_TYPE === \get_post_type( \get_query_var( 'p' ) ) ) { - \set_query_var( 'is_404', true ); - \status_header( 406 ); - } - return $template; - } - - if ( Tombstone::exists_local( Query::get_instance()->get_request_url() ) ) { - \status_header( 410 ); - return ACTIVITYPUB_PLUGIN_DIR . 'templates/tombstone-json.php'; - } - - $activitypub_template = false; - $activitypub_object = Query::get_instance()->get_activitypub_object(); - - if ( $activitypub_object ) { - if ( \get_query_var( 'preview' ) ) { - \define( 'ACTIVITYPUB_PREVIEW', true ); - - /** - * Filter the template used for the ActivityPub preview. - * - * @param string $activitypub_template Absolute path to the template file. - */ - $activitypub_template = apply_filters( 'activitypub_preview_template', ACTIVITYPUB_PLUGIN_DIR . '/templates/post-preview.php' ); - } else { - $activitypub_template = ACTIVITYPUB_PLUGIN_DIR . 'templates/activitypub-json.php'; - } - } - - /* - * Check if the request is authorized. - * - * @see https://www.w3.org/wiki/SocialCG/ActivityPub/Primer/Authentication_Authorization#Authorized_fetch - * @see https://swicg.github.io/activitypub-http-signature/#authorized-fetch - */ - if ( $activitypub_template && use_authorized_fetch() ) { - $verification = Signature::verify_http_signature( $_SERVER ); - if ( \is_wp_error( $verification ) ) { - \status_header( 401 ); - - // Fallback as template_loader can't return http headers. - return $template; - } - } - - if ( $activitypub_template ) { - \set_query_var( 'is_404', false ); - - // Check if header already sent. - if ( ! \headers_sent() ) { - // Send 200 status header. - \status_header( 200 ); - } - - return $activitypub_template; - } - - return $template; - } - - /** - * Add the 'self' link to the header. - */ - public static function add_headers() { - $id = Query::get_instance()->get_activitypub_object_id(); - - if ( ! $id ) { - return; - } - - if ( ! headers_sent() ) { - \header( 'Link: <' . esc_url( $id ) . '>; title="ActivityPub (JSON)"; rel="alternate"; type="application/activity+json"', false ); - - if ( \get_option( 'activitypub_vary_header', '1' ) ) { - // Send Vary header for Accept header. - \header( 'Vary: Accept', false ); - } - } - - add_action( - 'wp_head', - function () use ( $id ) { - echo PHP_EOL . '' . PHP_EOL; - } - ); - } - - /** - * Remove trailing slash from ActivityPub @username requests. - * - * @param string $redirect_url The URL to redirect to. - * @param string $requested_url The requested URL. - * - * @return string $redirect_url The possibly-unslashed redirect URL. - */ - public static function no_trailing_redirect( $redirect_url, $requested_url ) { - if ( get_query_var( 'actor' ) ) { - return $requested_url; - } - - return $redirect_url; - } - - /** - * Add support for `p` and `author` query vars. - * - * @param string $redirect_url The URL to redirect to. - * @param string $requested_url The requested URL. - * - * @return string $redirect_url - */ - public static function redirect_canonical( $redirect_url, $requested_url ) { - if ( ! is_activitypub_request() ) { - return $redirect_url; - } - - $query = \wp_parse_url( $requested_url, PHP_URL_QUERY ); - - if ( ! $query ) { - return $redirect_url; - } - - $query_params = \wp_parse_args( $query ); - unset( $query_params['activitypub'] ); - - if ( 1 !== count( $query_params ) ) { - return $redirect_url; - } - - if ( isset( $query_params['p'] ) ) { - return null; - } - - if ( isset( $query_params['author'] ) ) { - return null; - } - - return $requested_url; - } - - /** - * Custom redirects for ActivityPub requests. - * - * @return void - */ - public static function template_redirect() { - global $wp_query; - - $comment_id = get_query_var( 'c', null ); - - // Check if it seems to be a comment. - if ( $comment_id ) { - $comment = get_comment( $comment_id ); - - // Load a 404-page if `c` is set but not valid. - if ( ! $comment ) { - $wp_query->set_404(); - return; - } - - // Stop if it's not an ActivityPub comment. - if ( is_activitypub_request() && ! is_local_comment( $comment ) ) { - return; - } - - wp_safe_redirect( get_comment_link( $comment ) ); - exit; - } - - $actor = get_query_var( 'actor', null ); - if ( $actor ) { - $actor = Actors::get_by_username( $actor ); - if ( ! $actor || \is_wp_error( $actor ) ) { - $wp_query->set_404(); - return; - } - - if ( is_activitypub_request() ) { - return; - } - - \wp_safe_redirect( $actor->get_url(), 301 ); - exit; - } - } - - /** - * Add the 'activitypub' query variable so WordPress won't mangle it. - * - * @param array $vars The query variables. - * - * @return array The query variables. - */ - public static function add_query_vars( $vars ) { - $vars[] = 'activitypub'; - $vars[] = 'preview'; - $vars[] = 'author'; - $vars[] = 'actor'; - $vars[] = 'type'; - $vars[] = 'c'; - $vars[] = 'p'; - - return $vars; - } - /** * Replaces the default avatar. * @@ -393,43 +164,22 @@ public static function untrash_post( $post_id ) { } /** - * Add rewrite rules. + * Flush rewrite rules. */ - public static function add_rewrite_rules() { - /* - * If another system needs to take precedence over the ActivityPub rewrite rules, - * they can define their own and will manually call the appropriate functions as required. - */ - if ( ACTIVITYPUB_DISABLE_REWRITES ) { - return; - } - - if ( ! \class_exists( 'Webfinger' ) ) { - \add_rewrite_rule( - '^.well-known/webfinger', - 'index.php?rest_route=/' . ACTIVITYPUB_REST_NAMESPACE . '/webfinger', - 'top' - ); - } - - if ( ! \class_exists( 'Nodeinfo_Endpoint' ) && true === (bool) \get_option( 'blog_public', 1 ) ) { - \add_rewrite_rule( - '^.well-known/nodeinfo', - 'index.php?rest_route=/' . ACTIVITYPUB_REST_NAMESPACE . '/nodeinfo', - 'top' - ); - } - - \add_rewrite_rule( '^@([\w\-\.]+)\/?$', 'index.php?actor=$matches[1]', 'top' ); - \add_rewrite_endpoint( 'activitypub', EP_AUTHORS | EP_PERMALINK | EP_PAGES ); + public static function flush_rewrite_rules() { + Router::add_rewrite_rules(); + \flush_rewrite_rules(); } /** - * Flush rewrite rules. + * Add rewrite rules. + * + * @deprecated unreleased Use {@see Router::add_rewrite_rules()}. */ - public static function flush_rewrite_rules() { - self::add_rewrite_rules(); - \flush_rewrite_rules(); + public static function add_rewrite_rules() { + _deprecated_function( __FUNCTION__, 'unreleased', '\Activitypub\Router::add_rewrite_rules()' ); + + Router::add_rewrite_rules(); } /** diff --git a/includes/class-router.php b/includes/class-router.php new file mode 100644 index 000000000..ac623e302 --- /dev/null +++ b/includes/class-router.php @@ -0,0 +1,282 @@ +get_request_url() ) ) { + \status_header( 410 ); + return ACTIVITYPUB_PLUGIN_DIR . 'templates/tombstone-json.php'; + } + + $activitypub_template = false; + $activitypub_object = Query::get_instance()->get_activitypub_object(); + + if ( $activitypub_object ) { + if ( \get_query_var( 'preview' ) ) { + \define( 'ACTIVITYPUB_PREVIEW', true ); + + /** + * Filter the template used for the ActivityPub preview. + * + * @param string $activitypub_template Absolute path to the template file. + */ + $activitypub_template = apply_filters( 'activitypub_preview_template', ACTIVITYPUB_PLUGIN_DIR . '/templates/post-preview.php' ); + } else { + $activitypub_template = ACTIVITYPUB_PLUGIN_DIR . 'templates/activitypub-json.php'; + } + } + + /* + * Check if the request is authorized. + * + * @see https://www.w3.org/wiki/SocialCG/ActivityPub/Primer/Authentication_Authorization#Authorized_fetch + * @see https://swicg.github.io/activitypub-http-signature/#authorized-fetch + */ + if ( $activitypub_template && use_authorized_fetch() ) { + $verification = Signature::verify_http_signature( $_SERVER ); + if ( \is_wp_error( $verification ) ) { + \status_header( 401 ); + + // Fallback as template_loader can't return http headers. + return $template; + } + } + + if ( $activitypub_template ) { + \set_query_var( 'is_404', false ); + + // Check if header already sent. + if ( ! \headers_sent() ) { + // Send 200 status header. + \status_header( 200 ); + } + + return $activitypub_template; + } + + return $template; + } + + /** + * Add the 'self' link to the header. + */ + public static function add_headers() { + $id = Query::get_instance()->get_activitypub_object_id(); + + if ( ! $id ) { + return; + } + + if ( ! headers_sent() ) { + \header( 'Link: <' . esc_url( $id ) . '>; title="ActivityPub (JSON)"; rel="alternate"; type="application/activity+json"', false ); + + if ( \get_option( 'activitypub_vary_header', '1' ) ) { + // Send Vary header for Accept header. + \header( 'Vary: Accept', false ); + } + } + + add_action( + 'wp_head', + function () use ( $id ) { + echo PHP_EOL . '' . PHP_EOL; + } + ); + } + + /** + * Remove trailing slash from ActivityPub @username requests. + * + * @param string $redirect_url The URL to redirect to. + * @param string $requested_url The requested URL. + * + * @return string $redirect_url The possibly-unslashed redirect URL. + */ + public static function no_trailing_redirect( $redirect_url, $requested_url ) { + if ( get_query_var( 'actor' ) ) { + return $requested_url; + } + + return $redirect_url; + } + + /** + * Add support for `p` and `author` query vars. + * + * @param string $redirect_url The URL to redirect to. + * @param string $requested_url The requested URL. + * + * @return string $redirect_url + */ + public static function redirect_canonical( $redirect_url, $requested_url ) { + if ( ! is_activitypub_request() ) { + return $redirect_url; + } + + $query = \wp_parse_url( $requested_url, PHP_URL_QUERY ); + + if ( ! $query ) { + return $redirect_url; + } + + $query_params = \wp_parse_args( $query ); + unset( $query_params['activitypub'] ); + + if ( 1 !== count( $query_params ) ) { + return $redirect_url; + } + + if ( isset( $query_params['p'] ) ) { + return null; + } + + if ( isset( $query_params['author'] ) ) { + return null; + } + + return $requested_url; + } + + /** + * Custom redirects for ActivityPub requests. + * + * @return void + */ + public static function template_redirect() { + global $wp_query; + + $comment_id = \get_query_var( 'c', null ); + + // Check if it seems to be a comment. + if ( $comment_id ) { + $comment = \get_comment( $comment_id ); + + // Load a 404-page if `c` is set but not valid. + if ( ! $comment ) { + $wp_query->set_404(); + return; + } + + // Stop if it's not an ActivityPub comment. + if ( is_activitypub_request() && ! is_local_comment( $comment ) ) { + return; + } + + \wp_safe_redirect( get_comment_link( $comment ) ); + exit; + } + + $actor = \get_query_var( 'actor', null ); + if ( $actor ) { + $actor = Actors::get_by_username( $actor ); + if ( ! $actor || \is_wp_error( $actor ) ) { + $wp_query->set_404(); + return; + } + + if ( is_activitypub_request() ) { + return; + } + + \wp_safe_redirect( $actor->get_url(), 301 ); + exit; + } + } + + /** + * Add the 'activitypub' query variable so WordPress won't mangle it. + * + * @param array $vars The query variables. + * + * @return array The query variables. + */ + public static function add_query_vars( $vars ) { + $vars[] = 'activitypub'; + $vars[] = 'preview'; + $vars[] = 'author'; + $vars[] = 'actor'; + $vars[] = 'type'; + $vars[] = 'c'; + $vars[] = 'p'; + + return $vars; + } +} diff --git a/tests/includes/class-test-activitypub.php b/tests/includes/class-test-activitypub.php index 7d13b6050..c63f0f614 100644 --- a/tests/includes/class-test-activitypub.php +++ b/tests/includes/class-test-activitypub.php @@ -9,7 +9,6 @@ use Activitypub\Activitypub; use Activitypub\Collection\Outbox; -use Activitypub\Query; /** * Test class for Activitypub. @@ -17,34 +16,6 @@ * @coversDefaultClass \Activitypub\Activitypub */ class Test_Activitypub extends \WP_UnitTestCase { - /** - * Test user ID. - * - * @var int - */ - protected static $user_id; - - /** - * Create fake data before tests run. - * - * @param \WP_UnitTest_Factory $factory Helper that creates fake data. - */ - public static function wpSetUpBeforeClass( $factory ) { - self::$user_id = $factory->user->create( - array( - 'role' => 'author', - ) - ); - } - - /** - * Set up test environment. - */ - public function setUp(): void { - parent::setUp(); - Activitypub::init(); - } - /** * Test environment. */ @@ -65,41 +36,6 @@ public function test_post_type_support() { $this->assertContains( 'page', \get_post_types_by_support( 'activitypub' ) ); } - /** - * Test activitypub_preview_template filter. - * - * @covers ::render_activitypub_template - */ - public function test_preview_template_filter() { - // Create a test post. - $post_id = self::factory()->post->create( - array( - 'post_author' => 1, - ) - ); - $this->go_to( get_permalink( $post_id ) ); - - // Simulate ActivityPub request and preview mode. - $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; - \set_query_var( 'preview', true ); - - // Add filter before testing. - \add_filter( - 'activitypub_preview_template', - function () { - return '/custom/template.php'; - } - ); - - // Test that the filter is applied. - $template = Activitypub::render_activitypub_template( 'original.php' ); - $this->assertEquals( '/custom/template.php', $template, 'Custom preview template should be used when filter is applied.' ); - - // Clean up. - unset( $_SERVER['HTTP_ACCEPT'] ); - wp_delete_post( $post_id, true ); - } - /** * Test activity type meta sanitization. * @@ -120,7 +56,7 @@ public function test_activity_meta_sanitization( $meta_key, $meta_value, $expect $this->assertEquals( $meta_value, \get_post_meta( $post_id, $meta_key, true ) ); - wp_update_post( + \wp_update_post( array( 'ID' => $post_id, 'meta_input' => array( $meta_key => 'InvalidType' ), @@ -128,7 +64,7 @@ public function test_activity_meta_sanitization( $meta_key, $meta_value, $expect ); $this->assertEquals( $expected, \get_post_meta( $post_id, $meta_key, true ) ); - wp_delete_post( $post_id, true ); + \wp_delete_post( $post_id, true ); } /** @@ -143,155 +79,4 @@ public function activity_meta_sanitization_provider() { array( '_activitypub_activity_actor', 'blog', 'user' ), ); } - - /** - * Test that ActivityPub requests for custom post types return 200. - * - * @covers ::render_activitypub_template - */ - public function test_custom_post_type_returns_200() { - // Register a custom post type. - register_post_type( - 'test_cpt', - array( - 'public' => true, - 'label' => 'Test CPT', - ) - ); - - // Create a post with the custom post type. - $post_id = self::factory()->post->create( - array( - 'post_type' => 'test_cpt', - 'post_status' => 'publish', - 'post_author' => self::$user_id, - ) - ); - - global $wp_query; - - // Mock the Accept header. - $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; - - // Use the ugly post-url instead. - $this->go_to( '/?p=' . $post_id ); - - // Test the template response. - $template = Activitypub::render_activitypub_template( 'index.php' ); - $this->assertStringContainsString( 'activitypub-json.php', $template ); - $this->assertFalse( $wp_query->is_404 ); - - // Clean up. - unset( $_SERVER['HTTP_ACCEPT'] ); - _unregister_post_type( 'test_cpt' ); - } - - /** - * Test that ActivityPub requests for custom post types return 200. - * - * @covers ::render_activitypub_template - */ - public function test_custom_post_type_with_support_returns_200() { - // Register a custom post type with ActivityPub support. - register_post_type( - 'test_cpt_supported', - array( - 'public' => true, - 'label' => 'Test CPT Supported', - 'supports' => array( 'activitypub' ), - ) - ); - - // Create a post with the custom post type. - $post_id = self::factory()->post->create( - array( - 'post_type' => 'test_cpt_supported', - 'post_status' => 'publish', - 'post_author' => self::$user_id, - ) - ); - - global $wp_query; - - // Mock the Accept header. - $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; - - // Set up the query for the custom post type. - $this->go_to( '/?p=' . $post_id ); - - // Test the template response. - $template = Activitypub::render_activitypub_template( 'index.php' ); - $this->assertStringContainsString( 'activitypub-json.php', $template ); - $this->assertFalse( $wp_query->is_404 ); - - // Clean up. - unset( $_SERVER['HTTP_ACCEPT'] ); - _unregister_post_type( 'test_cpt_supported' ); - } - - /** - * Test 406/404 response for non-ActivityPub requests to Outbox post type. - * - * @covers ::render_activitypub_template - */ - public function test_outbox_post_type_non_activitypub_request_returns_406() { - $data = array( - '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => 'https://example.com/' . self::$user_id, - 'type' => 'Note', - 'content' => '

This is a note

', - ); - $post_id = \Activitypub\add_to_outbox( $data, 'Create', self::$user_id ); - - $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; - $this->go_to( '/?p=' . $post_id ); - $template = Activitypub::render_activitypub_template( 'index.php' ); - $this->assertStringContainsString( 'activitypub-json.php', $template ); - - Query::get_instance()->__destruct(); - - $status = null; - add_filter( - 'status_header', - function ( $status_header ) use ( &$status ) { - $status = $status_header; - return $status_header; - }, - 100 - ); - - unset( $_SERVER['HTTP_ACCEPT'] ); - $this->go_to( '/?p=' . $post_id ); - $template = Activitypub::render_activitypub_template( 'index.php' ); - $this->assertStringContainsString( 'index.php', $template ); - $this->assertStringContainsString( '406', $status ); - - wp_delete_post( $post_id, true ); - } - - /** - * Test no_trailing_redirect method. - * - * @covers ::no_trailing_redirect - */ - public function test_no_trailing_redirect() { - // Test case 1: When actor query var is set, it should return the requested URL. - set_query_var( 'actor', 'testuser' ); - $requested_url = 'https://example.org/@testuser'; - $redirect_url = 'https://example.org/@testuser/'; - - $result = Activitypub::no_trailing_redirect( $redirect_url, $requested_url ); - $this->assertEquals( $requested_url, $result, 'Should return requested URL when actor query var is set.' ); - - // Test case 2: When actor query var is not set, it should return the redirect URL. - set_query_var( 'actor', '' ); - $requested_url = 'https://example.org/some-page'; - $redirect_url = 'https://example.org/some-page/'; - - $result = Activitypub::no_trailing_redirect( $redirect_url, $requested_url ); - $this->assertEquals( $redirect_url, $result, 'Should return redirect URL when actor query var is not set.' ); - - // Clean up. - set_query_var( 'actor', null ); - } } diff --git a/tests/includes/class-test-router.php b/tests/includes/class-test-router.php new file mode 100644 index 000000000..060b33c62 --- /dev/null +++ b/tests/includes/class-test-router.php @@ -0,0 +1,241 @@ +user->create( + array( + 'role' => 'author', + ) + ); + } + + /** + * Set up test environment. + */ + public function setUp(): void { + parent::setUp(); + Router::init(); + } + + /** + * Test that ActivityPub requests for custom post types return 200. + * + * @covers ::render_activitypub_template + */ + public function test_custom_post_type_returns_200() { + // Register a custom post type. + register_post_type( + 'test_cpt', + array( + 'public' => true, + 'label' => 'Test CPT', + ) + ); + + \add_post_type_support( 'test_cpt', 'activitypub' ); + + // Create a post with the custom post type. + $post_id = self::factory()->post->create( + array( + 'post_type' => 'test_cpt', + 'post_status' => 'publish', + 'post_author' => self::$user_id, + ) + ); + + global $wp_query; + + // Mock the Accept header. + $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; + + // Use the ugly post-url instead. + $this->go_to( '/?p=' . $post_id ); + + // Test the template response. + $template = Router::render_activitypub_template( 'index.php' ); + $this->assertStringContainsString( 'activitypub-json.php', $template ); + $this->assertFalse( $wp_query->is_404 ); + + // Clean up. + unset( $_SERVER['HTTP_ACCEPT'] ); + _unregister_post_type( 'test_cpt' ); + } + + /** + * Test that ActivityPub requests for custom post types with built-in ActivityPub support return 200. + * + * This specifically tests custom post types registered with 'supports' => array( 'activitypub' ). + * + * @covers ::render_activitypub_template + */ + public function test_custom_post_type_with_support_returns_200() { + // Register a custom post type with ActivityPub support. + register_post_type( + 'test_cpt_supported', + array( + 'public' => true, + 'label' => 'Test CPT Supported', + 'supports' => array( 'activitypub' ), + ) + ); + + // Create a post with the custom post type. + $post_id = self::factory()->post->create( + array( + 'post_type' => 'test_cpt_supported', + 'post_status' => 'publish', + 'post_author' => self::$user_id, + ) + ); + + global $wp_query; + + // Mock the Accept header. + $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; + + // Set up the query for the custom post type. + $this->go_to( '/?p=' . $post_id ); + + // Test the template response. + $template = Router::render_activitypub_template( 'index.php' ); + $this->assertStringContainsString( 'activitypub-json.php', $template ); + $this->assertFalse( $wp_query->is_404 ); + + // Clean up. + unset( $_SERVER['HTTP_ACCEPT'] ); + _unregister_post_type( 'test_cpt_supported' ); + } + + /** + * Test 406/404 response for non-ActivityPub requests to Outbox post type. + * + * @covers ::render_activitypub_template + */ + public function test_outbox_post_type_non_activitypub_request_returns_406() { + $data = array( + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => 'https://example.com/' . self::$user_id, + 'type' => 'Note', + 'content' => '

This is a note

', + ); + $post_id = \Activitypub\add_to_outbox( $data, 'Create', self::$user_id ); + + $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; + $this->go_to( '/?p=' . $post_id ); + $template = Router::render_activitypub_template( 'index.php' ); + $this->assertStringContainsString( 'activitypub-json.php', $template ); + + Query::get_instance()->__destruct(); + + $status = null; + add_filter( + 'status_header', + function ( $status_header ) use ( &$status ) { + $status = $status_header; + return $status_header; + }, + 100 + ); + + unset( $_SERVER['HTTP_ACCEPT'] ); + $this->go_to( '/?p=' . $post_id ); + $template = Router::render_activitypub_template( 'index.php' ); + $this->assertStringContainsString( 'index.php', $template ); + $this->assertStringContainsString( '406', $status ); + + wp_delete_post( $post_id, true ); + } + + /** + * Test no_trailing_redirect method. + * + * @covers ::no_trailing_redirect + */ + public function test_no_trailing_redirect() { + // Test case 1: When actor query var is set, it should return the requested URL. + set_query_var( 'actor', 'testuser' ); + $requested_url = 'https://example.org/@testuser'; + $redirect_url = 'https://example.org/@testuser/'; + + $result = Router::no_trailing_redirect( $redirect_url, $requested_url ); + $this->assertEquals( $requested_url, $result, 'Should return requested URL when actor query var is set.' ); + + // Test case 2: When actor query var is not set, it should return the redirect URL. + set_query_var( 'actor', '' ); + $requested_url = 'https://example.org/some-page'; + $redirect_url = 'https://example.org/some-page/'; + + $result = Router::no_trailing_redirect( $redirect_url, $requested_url ); + $this->assertEquals( $redirect_url, $result, 'Should return redirect URL when actor query var is not set.' ); + + // Clean up. + set_query_var( 'actor', null ); + } + + /** + * Test activitypub_preview_template filter. + * + * @covers ::render_activitypub_template + */ + public function test_preview_template_filter() { + Query::get_instance()->__destruct(); + + // Create a test post. + $post_id = self::factory()->post->create( + array( + 'post_author' => 1, + ) + ); + $this->go_to( get_permalink( $post_id ) ); + + // Simulate ActivityPub request and preview mode. + $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; + \set_query_var( 'preview', true ); + + // Add filter before testing. + \add_filter( + 'activitypub_preview_template', + function () { + return '/custom/template.php'; + } + ); + + // Test that the filter is applied. + $template = Router::render_activitypub_template( 'original.php' ); + $this->assertEquals( '/custom/template.php', $template, 'Custom preview template should be used when filter is applied.' ); + + // Clean up. + unset( $_SERVER['HTTP_ACCEPT'] ); + wp_delete_post( $post_id, true ); + } +} From 6d3d3936833253a786bb777ec65702e6110866d3 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 16:00:35 +0200 Subject: [PATCH 20/52] Update deploy workflow to trigger on release (#2248) --- .github/workflows/deploy.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f137d1960..135cce196 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,11 +1,10 @@ name: Deploy to WordPress.org on: - push: - tags: - - '*' + release: + types: [released] jobs: - tag: - name: New tag + deploy_to_wp_repository: + name: Deploy to WP.org runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 From a7aaddd03ccc215eb611bc8ee3f0dee2d466be86 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 16:39:37 +0200 Subject: [PATCH 21/52] Update Jetpack connection check to use Manager class (#2249) --- integration/class-jetpack.php | 3 +- tests/data/class-manager.php | 27 ++++++++++ tests/integration/class-test-jetpack.php | 69 ++++++++++++++++++++---- 3 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 tests/data/class-manager.php diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index 2ed7f5940..e4950d7d0 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -10,6 +10,7 @@ use Activitypub\Collection\Followers; use Activitypub\Collection\Following; use Activitypub\Comment; +use Automattic\Jetpack\Connection\Manager; /** * Jetpack integration class. @@ -30,7 +31,7 @@ public static function init() { if ( ( \defined( 'IS_WPCOM' ) && IS_WPCOM ) || - ( \class_exists( '\Jetpack' ) && \Jetpack::is_connection_ready() ) + ( \class_exists( '\Automattic\Jetpack\Connection\Manager' ) && ( new Manager() )->is_user_connected() ) ) { \add_filter( 'activitypub_following_row_actions', array( self::class, 'add_reader_link' ), 10, 2 ); \add_filter( 'pre_option_activitypub_following_ui', array( self::class, 'pre_option_activitypub_following_ui' ) ); diff --git a/tests/data/class-manager.php b/tests/data/class-manager.php new file mode 100644 index 000000000..bfeaa2169 --- /dev/null +++ b/tests/data/class-manager.php @@ -0,0 +1,27 @@ +assertFalse( class_exists( '\Automattic\Jetpack\Connection\Manager' ), 'Manager class should not exist yet' ); + // Ensure hooks are not already registered. $this->assertFalse( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); + $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); - // Initialize Jetpack integration. + // Initialize Jetpack integration without Manager class loaded. Jetpack::init(); - // Check that sync hooks are registered (when not on WordPress.com). + // Check that sync hooks are registered regardless of Manager class. $this->assertTrue( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); $this->assertTrue( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); $this->assertTrue( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); $this->assertTrue( has_filter( 'jetpack_json_api_comment_types' ) ); $this->assertTrue( has_filter( 'jetpack_api_include_comment_types_count' ) ); + + // Following UI hooks should NOT be registered without Manager class. + $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); } /** - * Test that following UI hooks are not registered without proper conditions. + * Test init method registers all hooks with Manager class available. * * @covers ::init */ - public function test_init_skips_following_ui_hooks_without_conditions() { + public function test_b_init_registers_hooks_with_manager() { + // Load mock Manager class. + $this->load_mock_manager(); + // Ensure hooks are not already registered. + $this->assertFalse( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); - // Initialize Jetpack integration. + // Initialize Jetpack integration with Manager class. Jetpack::init(); - // Following UI hooks should NOT be registered in test environment - // because neither IS_WPCOM is defined nor is Jetpack connected. - $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); - $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); + // Check that sync hooks are registered. + $this->assertTrue( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); + $this->assertTrue( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); + $this->assertTrue( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); + $this->assertTrue( has_filter( 'jetpack_json_api_comment_types' ) ); + $this->assertTrue( has_filter( 'jetpack_api_include_comment_types_count' ) ); + + // Following UI hooks should also be registered (mock Manager returns connected). + $this->assertTrue( has_filter( 'activitypub_following_row_actions' ) ); + $this->assertTrue( has_filter( 'pre_option_activitypub_following_ui' ) ); + } + + /** + * Test that Manager class connection check works when available. + * + * @covers ::init + */ + public function test_c_manager_connection_check() { + // Load mock Manager class. + $this->load_mock_manager(); + + // Test that our mock Manager class exists and works. + $this->assertTrue( class_exists( '\Automattic\Jetpack\Connection\Manager' ), 'Mock Manager class should exist' ); + + $manager = new \Automattic\Jetpack\Connection\Manager(); + $this->assertTrue( $manager->is_user_connected(), 'Mock Manager should return connected' ); } /** From 63595d42770f4b4d0e0835111d9472ddcb789fd7 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 16:44:16 +0200 Subject: [PATCH 22/52] Add external link icon to Jetpack reader feed link (#2247) --- assets/css/activitypub-admin.css | 5 +++++ integration/class-jetpack.php | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/assets/css/activitypub-admin.css b/assets/css/activitypub-admin.css index 519d31090..7a92bdaa8 100644 --- a/assets/css/activitypub-admin.css +++ b/assets/css/activitypub-admin.css @@ -176,6 +176,11 @@ summary { transform: translateY(-30%) rotate(-135deg); } +table.followings .dashicons { + font-size: 1em; + line-height: 1.7; +} + .activitypub-settings-accordion-trigger:active, .activitypub-settings-accordion-trigger:hover { background: #f6f7f7; diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index e4950d7d0..20db4ed0b 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -105,9 +105,11 @@ public static function add_reader_link( $actions, $item ) { return array_merge( array( 'reader' => sprintf( - '%s', + '%2$s %3$s', esc_url( $url ), - esc_html__( 'View Feed', 'activitypub' ) + esc_html__( 'View Feed', 'activitypub' ), + /* translators: Hidden accessibility text. */ + esc_html__( '(opens in a new tab)', 'activitypub' ) ), ), $actions From f89b0052d2a931a4d50bf845d7ed1f4fface5494 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Tue, 30 Sep 2025 10:02:51 -0500 Subject: [PATCH 23/52] Add upgrade routine to enable ActivityPub feeds in WordPress.com Reader (#2243) --- .github/changelog/2243-from-description | 4 ++ includes/class-migration.php | 40 +++++++++++++ tests/data/class-jetpack.php | 22 +++++++ tests/includes/class-test-migration.php | 76 +++++++++++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 .github/changelog/2243-from-description create mode 100644 tests/data/class-jetpack.php diff --git a/.github/changelog/2243-from-description b/.github/changelog/2243-from-description new file mode 100644 index 000000000..a4eafa247 --- /dev/null +++ b/.github/changelog/2243-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Add upgrade routine to enable ActivityPub feeds in WordPress.com Reader diff --git a/includes/class-migration.php b/includes/class-migration.php index 3c358cc62..5965cc8dd 100644 --- a/includes/class-migration.php +++ b/includes/class-migration.php @@ -10,6 +10,7 @@ use Activitypub\Collection\Actors; use Activitypub\Collection\Extra_Fields; use Activitypub\Collection\Followers; +use Activitypub\Collection\Following; use Activitypub\Collection\Outbox; use Activitypub\Collection\Remote_Actors; use Activitypub\Transformer\Factory; @@ -204,6 +205,10 @@ public static function maybe_migrate() { self::remove_pending_application_user_follow_requests(); } + if ( \version_compare( $version_from_db, 'unreleased', '<' ) ) { + self::sync_jetpack_following_meta(); + } + // Ensure all required cron schedules are registered. Scheduler::register_schedules(); @@ -1011,4 +1016,39 @@ public static function remove_pending_application_user_follow_requests() { ) ); } + + /** + * Sync Jetpack meta for all followings. + * + * Replays the added_post_meta sync action for Jetpack with the Following::FOLLOWING_META_KEY meta key. + */ + public static function sync_jetpack_following_meta() { + if ( ! \class_exists( 'Jetpack' ) || ! \Jetpack::is_connection_ready() ) { + return; + } + + global $wpdb; + + // Get all posts that have the following meta key. + $posts_with_following = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery + $wpdb->prepare( + "SELECT meta_id, post_id, meta_key, meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s", + Following::FOLLOWING_META_KEY + ), + ARRAY_N + ); + + // Trigger the added_post_meta action for each following relationship. + foreach ( $posts_with_following as $meta ) { + /** + * Fires when post meta is added. + * + * @param int $meta_id ID of the metadata entry. + * @param int $object_id Post ID. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + */ + \do_action( 'added_post_meta', ...$meta ); + } + } } diff --git a/tests/data/class-jetpack.php b/tests/data/class-jetpack.php new file mode 100644 index 000000000..e9cb0fdd2 --- /dev/null +++ b/tests/data/class-jetpack.php @@ -0,0 +1,22 @@ +post->create_many( 3, array( 'post_type' => Remote_Actors::POST_TYPE ) ); + + // Add following meta to each post. + \add_post_meta( $posts[0], Following::FOLLOWING_META_KEY, '123' ); + \add_post_meta( $posts[1], Following::FOLLOWING_META_KEY, '456' ); + \add_post_meta( $posts[2], Following::FOLLOWING_META_KEY, '789' ); + + // Track action calls. + $action_calls = array(); + $capture_action = function () use ( &$action_calls ) { + $action_calls[] = func_get_args(); + }; + + \add_action( 'added_post_meta', $capture_action, 10, 4 ); + + // Run the migration with Jetpack available. + Migration::sync_jetpack_following_meta(); + + // Verify the correct actions were triggered. + $this->assertCount( 3, $action_calls, 'Should trigger action for each following meta entry' ); + + // Check the first action call structure. + $this->assertCount( 4, $action_calls[0], 'Action should be called with 4 parameters' ); + list( $meta_id, $post_id, $meta_key, $meta_value ) = $action_calls[0]; + + $this->assertEquals( Following::FOLLOWING_META_KEY, $meta_key, 'Meta key should be Following::FOLLOWING_META_KEY' ); + $this->assertIsNumeric( $meta_id, 'Meta ID should be numeric' ); + $this->assertIsNumeric( $post_id, 'Post ID should be numeric' ); + $this->assertContains( $meta_value, array( '123', '456', '789' ), 'Meta value should be one of the test values' ); + + // Clean up. + \remove_action( 'added_post_meta', $capture_action, 10 ); + foreach ( $posts as $post ) { + \wp_delete_post( $post, true ); + } + } + + /** + * Test sync_jetpack_following_meta with no following meta. + * + * @covers ::sync_jetpack_following_meta + */ + public function test_sync_jetpack_following_meta_no_entries() { + // Track action calls for the specific meta key we care about. + $following_actions = array(); + $capture_action = function ( $meta_id, $post_id, $meta_key, $meta_value ) use ( &$following_actions ) { + if ( Following::FOLLOWING_META_KEY === $meta_key ) { + $following_actions[] = array( $meta_id, $post_id, $meta_key, $meta_value ); + } + }; + + \add_action( 'added_post_meta', $capture_action, 10, 4 ); + + // Run migration with no following meta (should not trigger our specific actions). + Migration::sync_jetpack_following_meta(); + + // Verify no following-specific actions were triggered. + $this->assertEmpty( $following_actions, 'No following-specific actions should be triggered when no following meta exists' ); + + // Clean up. + \remove_action( 'added_post_meta', $capture_action, 10 ); + } } From 4dec3c95481aa5e3478540a043b29e5b3b20dc65 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 17:36:37 +0200 Subject: [PATCH 24/52] Improve user ID fallback and transformer logic (#2246) --- .github/changelog/2246-from-description | 4 ++++ includes/functions.php | 16 ++++++++++++++-- includes/transformer/class-factory.php | 3 ++- tests/includes/class-test-functions.php | 11 +++++++++++ .../includes/transformer/class-test-factory.php | 17 +++++++++++++++-- 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 .github/changelog/2246-from-description diff --git a/.github/changelog/2246-from-description b/.github/changelog/2246-from-description new file mode 100644 index 000000000..567b5b97d --- /dev/null +++ b/.github/changelog/2246-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Posts now only fall back to the blog user when blog mode is enabled and no valid author exists, ensuring content negotiation only runs if an Actor is available. diff --git a/includes/functions.php b/includes/functions.php index 2b45c38c9..5f0be9cb7 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1300,12 +1300,24 @@ function get_content_warning( $post_id ) { /** * Get the ActivityPub ID of a User by the WordPress User ID. * + * Fall back to blog user if in blog mode or if user is not found. + * * @param int $id The WordPress User ID. * - * @return string The ActivityPub ID (a URL) of the User. + * @return string|false The ActivityPub ID (a URL) of the User or false if not found. */ function get_user_id( $id ) { - $user = Actors::get_by_id( $id ); + $mode = \get_option( 'activitypub_actor_mode', 'default' ); + + if ( ACTIVITYPUB_BLOG_MODE === $mode ) { + $user = Actors::get_by_id( Actors::BLOG_USER_ID ); + } else { + $user = Actors::get_by_id( $id ); + + if ( \is_wp_error( $user ) ) { + $user = Actors::get_by_id( Actors::BLOG_USER_ID ); + } + } if ( \is_wp_error( $user ) ) { return false; diff --git a/includes/transformer/class-factory.php b/includes/transformer/class-factory.php index 1d2155730..ad88eb576 100644 --- a/includes/transformer/class-factory.php +++ b/includes/transformer/class-factory.php @@ -11,6 +11,7 @@ use Activitypub\Comment as Comment_Helper; use Activitypub\Http; +use function Activitypub\get_user_id; use function Activitypub\is_post_disabled; use function Activitypub\user_can_activitypub; @@ -90,7 +91,7 @@ public static function get_transformer( $data ) { case 'WP_Post': if ( 'attachment' === $data->post_type && ! is_post_disabled( $data ) ) { return new Attachment( $data ); - } elseif ( ! is_post_disabled( $data ) ) { + } elseif ( ! is_post_disabled( $data ) && get_user_id( $data->post_author ) ) { return new Post( $data ); } break; diff --git a/tests/includes/class-test-functions.php b/tests/includes/class-test-functions.php index 2cdee032c..a02b7aafc 100644 --- a/tests/includes/class-test-functions.php +++ b/tests/includes/class-test-functions.php @@ -712,6 +712,17 @@ public function test_get_user_id() { $user->add_cap( 'activitypub' ); $this->assertIsString( \Activitypub\get_user_id( $user->ID ) ); + + \add_option( 'activitypub_actor_mode', ACTIVITYPUB_ACTOR_MODE ); + + $this->assertIsString( \Activitypub\get_user_id( $user->ID ) ); + + $user->remove_cap( 'activitypub' ); + \update_option( 'activitypub_actor_mode', ACTIVITYPUB_BLOG_MODE ); + $this->assertIsString( \Activitypub\get_user_id( $user->ID ) ); + + \update_option( 'activitypub_actor_mode', ACTIVITYPUB_ACTOR_MODE ); + $this->assertFalse( \Activitypub\get_user_id( $user->ID ) ); } /** diff --git a/tests/includes/transformer/class-test-factory.php b/tests/includes/transformer/class-test-factory.php index 4d324dcf8..aaffba8f0 100644 --- a/tests/includes/transformer/class-test-factory.php +++ b/tests/includes/transformer/class-test-factory.php @@ -13,14 +13,13 @@ use Activitypub\Transformer\Factory; use Activitypub\Transformer\Json; use Activitypub\Transformer\Post; -use WP_UnitTestCase; /** * Test class for Transformer Factory. * * @coversDefaultClass \Activitypub\Transformer\Factory */ -class Test_Factory extends WP_UnitTestCase { +class Test_Factory extends \WP_UnitTestCase { /** * Test post ID. * @@ -113,6 +112,20 @@ public function test_get_transformer_post() { $post = get_post( self::$post_id ); $transformer = Factory::get_transformer( $post ); + $this->assertInstanceOf( \WP_Error::class, $transformer ); + + \add_option( 'activitypub_actor_mode', ACTIVITYPUB_ACTOR_AND_BLOG_MODE ); + + $post = get_post( self::$post_id ); + $transformer = Factory::get_transformer( $post ); + + $this->assertInstanceOf( Post::class, $transformer ); + + \add_option( 'activitypub_actor_mode', ACTIVITYPUB_ACTOR_MODE ); + + $post = get_post( self::$post_id ); + $transformer = Factory::get_transformer( $post ); + $this->assertInstanceOf( Post::class, $transformer ); } From 2c6674059d87800d7417ab9405e98afb71fd3b73 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 17:56:30 +0200 Subject: [PATCH 25/52] Fix Reader URL generation for WPCOM environment (#2250) --- integration/class-jetpack.php | 6 +++++- tests/integration/class-test-jetpack.php | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index 20db4ed0b..e0f55256a 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -96,7 +96,11 @@ public static function add_reader_link( $actions, $item ) { $feed = \get_post_meta( $item['id'], '_activitypub_actor_feed', true ); - if ( isset( $feed['feed_id'] ) ) { + // Generate Reader URL based on environment. + if ( \defined( 'IS_WPCOM' ) && IS_WPCOM ) { + if ( empty( $feed['feed_id'] ) ) { + return $actions; // No feed_id available on WPCOM. + } $url = sprintf( 'https://wordpress.com/reader/feed/%d', (int) $feed['feed_id'] ); } else { $url = sprintf( 'https://wordpress.com/reader/feeds/lookup/%s', rawurlencode( $item['identifier'] ) ); diff --git a/tests/integration/class-test-jetpack.php b/tests/integration/class-test-jetpack.php index 6d3099107..3551f5b8a 100644 --- a/tests/integration/class-test-jetpack.php +++ b/tests/integration/class-test-jetpack.php @@ -323,6 +323,8 @@ public function reader_link_data() { * * @dataProvider reader_link_data * @covers ::add_reader_link + * @runInSeparateProcess + * @preserveGlobalState disabled * * @param array $item The following item. * @param int|false $feed_id The feed ID or false. @@ -332,6 +334,12 @@ public function reader_link_data() { public function test_add_reader_link( $item, $feed_id, $expected_url, $should_have_reader_link ) { $original_actions = array( 'edit' => 'Edit' ); + // Set up WPCOM environment if expecting WPCOM-style URL. + $is_wpcom_test = $expected_url && strpos( $expected_url, '/reader/feed/' ) !== false; + if ( $is_wpcom_test && ! defined( 'IS_WPCOM' ) ) { + define( 'IS_WPCOM', true ); + } + // Mock the feed ID meta if provided. if ( false !== $feed_id ) { add_filter( From 120df7d78bc158855dc479d3e94cb9e08abdb2a2 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Tue, 30 Sep 2025 18:13:40 +0200 Subject: [PATCH 26/52] Add QuoteRequest activity handler support (#2240) --- .github/changelog/2240-from-description | 4 + FEDERATION.md | 1 + includes/activity/class-activity.php | 5 + includes/activity/class-generic-object.php | 2 + .../class-quote-authorization.php | 70 +++ includes/class-comment.php | 2 +- includes/class-handler.php | 2 + includes/class-query.php | 49 +- includes/class-router.php | 2 + includes/functions.php | 11 +- includes/handler/class-quote-request.php | 236 +++++++++ includes/model/class-blog.php | 2 +- includes/model/class-user.php | 2 +- .../rest/class-actors-inbox-controller.php | 3 +- includes/rest/class-inbox-controller.php | 3 +- includes/transformer/class-post.php | 2 +- tests/includes/class-test-functions.php | 34 ++ tests/includes/class-test-query.php | 119 +++++ .../handler/class-test-quote-request.php | 491 ++++++++++++++++++ 19 files changed, 1028 insertions(+), 12 deletions(-) create mode 100644 .github/changelog/2240-from-description create mode 100644 includes/activity/extended-object/class-quote-authorization.php create mode 100644 includes/handler/class-quote-request.php create mode 100644 tests/includes/handler/class-test-quote-request.php diff --git a/.github/changelog/2240-from-description b/.github/changelog/2240-from-description new file mode 100644 index 000000000..7859dea42 --- /dev/null +++ b/.github/changelog/2240-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Added support for QuoteRequest activities (FEP-044f), enabling proper handling, validation, and policy-based acceptance or rejection of quote requests. diff --git a/FEDERATION.md b/FEDERATION.md index 90aa8ccc7..8fc7af435 100644 --- a/FEDERATION.md +++ b/FEDERATION.md @@ -21,6 +21,7 @@ The WordPress plugin largely follows ActivityPub's server-to-server specificatio - [FEP-b2b8: Long-form Text](https://codeberg.org/fediverse/fep/src/branch/main/fep/b2b8/fep-b2b8.md) - [FEP-7888: Demystifying the context property](https://codeberg.org/fediverse/fep/src/branch/main/fep/7888/fep-7888.md) - [FEP-844e: Capability discovery](https://codeberg.org/fediverse/fep/src/branch/main/fep/844e/fep-844e.md) +- [FEP-044f: Consent-respecting quote posts](https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md) Partially supported FEPs diff --git a/includes/activity/class-activity.php b/includes/activity/class-activity.php index 1bc5c123e..7d3ad9fb3 100644 --- a/includes/activity/class-activity.php +++ b/includes/activity/class-activity.php @@ -22,6 +22,10 @@ class Activity extends Base_Object { const JSON_LD_CONTEXT = array( 'https://www.w3.org/ns/activitystreams', + array( + 'toot' => 'http://joinmastodon.org/ns#', + 'QuoteRequest' => 'toot:QuoteRequest', + ), ); /** @@ -50,6 +54,7 @@ class Activity extends Base_Object { 'Listen', 'Move', 'Offer', + 'QuoteRequest', // @see https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md 'Read', 'Reject', 'Remove', diff --git a/includes/activity/class-generic-object.php b/includes/activity/class-generic-object.php index 500670a9b..b38485d52 100644 --- a/includes/activity/class-generic-object.php +++ b/includes/activity/class-generic-object.php @@ -39,6 +39,7 @@ * @method string|string[]|null get_origin() Gets the origin property of the object. * @method string|null get_preferred_username() Gets the preferred username of the object. * @method string|null get_published() Gets the date and time the object was published in ISO 8601 format. + * @method string|null get_result() Gets the result property of the object. * @method bool|null get_sensitive() Gets the sensitive property of the object. * @method string|null get_summary() Gets the natural language summary of the object. * @method string[]|null get_summary_map() Gets the summary map property of the object. @@ -70,6 +71,7 @@ * @method Base_Object set_object( string|array|Base_Object|null $data ) Sets the direct object of the activity. * @method Base_Object set_origin( string|array|null $origin ) Sets the origin property of the object. * @method Base_Object set_published( string|null $published ) Sets the date and time the object was published in ISO 8601 format. + * @method Base_Object set_result( string|null $result ) Sets the result property of the object. * @method Base_Object set_sensitive( bool|null $sensitive ) Sets the sensitive property of the object. * @method Base_Object set_summary( string $summary ) Sets the natural language summary of the object. * @method Base_Object set_summary_map( array|null $summary_map ) Sets the summary property of the object. diff --git a/includes/activity/extended-object/class-quote-authorization.php b/includes/activity/extended-object/class-quote-authorization.php new file mode 100644 index 000000000..140dd5012 --- /dev/null +++ b/includes/activity/extended-object/class-quote-authorization.php @@ -0,0 +1,70 @@ + 'https://w3id.org/fep/044f#QuoteAuthorization', + 'gts' => 'https://gotosocial.org/ns#', + 'interactingObject' => array( + '@id' => 'gts:interactingObject', + '@type' => '@id', + ), + 'interactionTarget' => array( + '@id' => 'gts:interactionTarget', + '@type' => '@id', + ), + ), + ); + + /** + * The type of the object. + * + * @var string + */ + protected $type = 'QuoteAuthorization'; + + /** + * The object that is being interacted with. + * + * @var Base_Object|string|array|null + */ + protected $interacting_object; + + /** + * The target of the interaction. + * + * @var Base_Object|string|array|null + */ + protected $interaction_target; +} diff --git a/includes/class-comment.php b/includes/class-comment.php index a02599b7a..0ea1d6f60 100644 --- a/includes/class-comment.php +++ b/includes/class-comment.php @@ -473,7 +473,7 @@ public static function generate_id( $comment ) { } // Generate URI based on comment ID. - return \add_query_arg( 'c', $comment->comment_ID, \trailingslashit( \home_url() ) ); + return \add_query_arg( 'c', $comment->comment_ID, \home_url( '/' ) ); } /** diff --git a/includes/class-handler.php b/includes/class-handler.php index 9e61b46bb..2ef9250fd 100644 --- a/includes/class-handler.php +++ b/includes/class-handler.php @@ -15,6 +15,7 @@ use Activitypub\Handler\Inbox; use Activitypub\Handler\Like; use Activitypub\Handler\Move; +use Activitypub\Handler\Quote_Request; use Activitypub\Handler\Reject; use Activitypub\Handler\Undo; use Activitypub\Handler\Update; @@ -42,6 +43,7 @@ public static function register_handlers() { Inbox::init(); Like::init(); Move::init(); + Quote_Request::init(); Reject::init(); Undo::init(); Update::init(); diff --git a/includes/class-query.php b/includes/class-query.php index 7690d5e9c..199b89756 100644 --- a/includes/class-query.php +++ b/includes/class-query.php @@ -7,6 +7,7 @@ namespace Activitypub; +use Activitypub\Activity\Extended_Object\Quote_Authorization; use Activitypub\Collection\Actors; use Activitypub\Collection\Outbox; use Activitypub\Transformer\Factory; @@ -138,6 +139,10 @@ public function get_activitypub_object_id() { private function prepare_activitypub_data() { $queried_object = $this->get_queried_object(); + if ( $queried_object instanceof \WP_Post && \get_query_var( 'stamp' ) ) { + return $this->maybe_get_stamp(); + } + // Check for Outbox Activity. if ( $queried_object instanceof \WP_Post && @@ -311,7 +316,7 @@ public function is_activitypub_request() { */ public function should_negotiate_content() { $return = false; - $always_negotiate = array( 'p', 'c', 'author', 'actor', 'preview', 'activitypub' ); + $always_negotiate = array( 'p', 'c', 'author', 'actor', 'stamp', 'preview', 'activitypub' ); $url = \wp_parse_url( $this->get_request_url(), PHP_URL_QUERY ); $query = array(); \wp_parse_str( $url, $query ); @@ -368,4 +373,46 @@ public function is_old_host_request() { public function set_old_host_request( $state = true ) { $this->is_old_host_request = $state; } + + /** + * Maybe get a QuoteAuthorization object from a stamp. + * + * @return bool True if the object was prepared, false otherwise. + */ + private function maybe_get_stamp() { + require_once ABSPATH . 'wp-admin/includes/post.php'; + + $stamp = \get_query_var( 'stamp' ); + $meta = \get_post_meta_by_id( (int) $stamp ); + + if ( ! $meta ) { + return false; + } + + $post = $this->get_queried_object(); + $user_uri = get_user_id( $post->post_author ); + + if ( ! $user_uri ) { + return false; + } + + $stamp_uri = \add_query_arg( + array( + 'p' => $post->ID, + 'stamp' => $meta->meta_id, + ), + \home_url( '/' ) + ); + + $activitypub_object = new Quote_Authorization(); + $activitypub_object->set_id( $stamp_uri ); + $activitypub_object->set_attributed_to( $user_uri ); + $activitypub_object->set_interacting_object( $meta->meta_value ); + $activitypub_object->set_interaction_target( get_post_id( $post->ID ) ); + + $this->activitypub_object = $activitypub_object; + $this->activitypub_object_id = $activitypub_object->get_id(); + + return true; + } } diff --git a/includes/class-router.php b/includes/class-router.php index ac623e302..bfa0da20e 100644 --- a/includes/class-router.php +++ b/includes/class-router.php @@ -199,6 +199,7 @@ public static function redirect_canonical( $redirect_url, $requested_url ) { $query_params = \wp_parse_args( $query ); unset( $query_params['activitypub'] ); + unset( $query_params['stamp'] ); if ( 1 !== count( $query_params ) ) { return $redirect_url; @@ -273,6 +274,7 @@ public static function add_query_vars( $vars ) { $vars[] = 'preview'; $vars[] = 'author'; $vars[] = 'actor'; + $vars[] = 'stamp'; $vars[] = 'type'; $vars[] = 'c'; $vars[] = 'p'; diff --git a/includes/functions.php b/includes/functions.php index 5f0be9cb7..2dac8121f 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1334,14 +1334,15 @@ function get_user_id( $id ) { * @return string The ActivityPub ID (a URL) of the Post. */ function get_post_id( $id ) { - $post = get_post( $id ); + $last_legacy_id = (int) \get_option( 'activitypub_last_post_with_permalink_as_id', 0 ); + $post_id = (int) $id; - if ( ! $post ) { - return false; + if ( $post_id > $last_legacy_id ) { + // Generate URI based on post ID. + return \add_query_arg( 'p', $post_id, \home_url( '/' ) ); } - $transformer = new Post( $post ); - return $transformer->get_id(); + return \get_permalink( $post_id ); } /** diff --git a/includes/handler/class-quote-request.php b/includes/handler/class-quote-request.php new file mode 100644 index 000000000..06e994955 --- /dev/null +++ b/includes/handler/class-quote-request.php @@ -0,0 +1,236 @@ +ID, $user_id ) ) { + self::queue_accept( $activity, $user_id, $post_id ); + } else { + self::queue_reject( $activity, $user_id ); + $state = false; + } + break; + case ACTIVITYPUB_INTERACTION_POLICY_ANYONE: + default: + self::queue_accept( $activity, $user_id, $post_id ); + break; + } + + /** + * Fires after an ActivityPub QuoteRequest activity has been handled. + * + * @param array $activity The ActivityPub activity data. + * @param int $user_id The local user ID. + * @param bool $success True on success, false otherwise. + * @param string $content_policy The content policy for the quoted post. + */ + \do_action( 'activitypub_handled_quote_request', $activity, $user_id, $state, $content_policy ); + } + + /** + * ActivityPub inbox disallowed activity. + * + * @param array $activity The activity array. + * @param int|null $user_id The user ID. + * @param string $type The type of the activity. + */ + public static function handle_blocked_request( $activity, $user_id, $type ) { + if ( 'quoterequest' !== \strtolower( $type ) ) { + return; + } + + self::queue_reject( $activity, $user_id ); + } + + /** + * Send an Accept activity in response to the QuoteRequest. + * + * @see https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md#example-accept + * + * @param array $activity_object The activity object. + * @param int $user_id The user ID. + * @param int $post_id The post ID. + */ + public static function queue_accept( $activity_object, $user_id, $post_id ) { + $actor = Actors::get_by_id( $user_id ); + + if ( \is_wp_error( $actor ) ) { + return; + } + + $activity_object['instrument'] = object_to_uri( $activity_object['instrument'] ); + + $post_meta = \get_post_meta( $post_id, '_activitypub_quoted_by', false ); + if ( in_array( $activity_object['instrument'], $post_meta, true ) ) { + global $wpdb; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $meta_id = $wpdb->get_var( + $wpdb->prepare( + "SELECT meta_id FROM {$wpdb->postmeta} WHERE post_id = %d AND meta_key = %s AND meta_value = %s LIMIT 1", + $post_id, + '_activitypub_quoted_by', + $activity_object['instrument'] + ) + ); + } else { + $meta_id = \add_post_meta( $post_id, '_activitypub_quoted_by', $activity_object['instrument'] ); + } + + // Only send minimal data. + $activity_object = array_intersect_key( + $activity_object, + array( + 'id' => 1, + 'type' => 1, + 'actor' => 1, + 'object' => 1, + 'instrument' => 1, + ) + ); + + $url = \add_query_arg( + array( + 'p' => $post_id, + 'stamp' => $meta_id, + ), + \home_url( '/' ) + ); + + $activity = new Activity(); + $activity->set_type( 'Accept' ); + $activity->set_actor( $actor->get_id() ); + $activity->set_object( $activity_object ); + $activity->set_result( $url ); + $activity->add_to( object_to_uri( $activity_object['actor'] ) ); + + add_to_outbox( $activity, null, $user_id, ACTIVITYPUB_CONTENT_VISIBILITY_PRIVATE ); + } + + /** + * Send a Reject activity in response to the QuoteRequest. + * + * @see https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md#example-reject + * + * @param array $activity_object The activity object. + * @param int $user_id The user ID. + */ + public static function queue_reject( $activity_object, $user_id ) { + $actor = Actors::get_by_id( $user_id ); + + if ( \is_wp_error( $actor ) ) { + return; + } + + $activity_object['instrument'] = object_to_uri( $activity_object['instrument'] ); + + // Only send minimal data. + $activity_object = array_intersect_key( + $activity_object, + array( + 'id' => 1, + 'type' => 1, + 'actor' => 1, + 'object' => 1, + 'instrument' => 1, + ) + ); + + $activity = new Activity(); + $activity->set_type( 'Reject' ); + $activity->set_actor( $actor->get_id() ); + $activity->set_object( $activity_object ); + $activity->add_to( object_to_uri( $activity_object['actor'] ) ); + + add_to_outbox( $activity, null, $user_id, ACTIVITYPUB_CONTENT_VISIBILITY_PRIVATE ); + } + + /** + * Validate the object. + * + * @param bool $valid The validation state. + * @param string $param The object parameter. + * @param \WP_REST_Request $request The request object. + * + * @return bool The validation state: true if valid, false if not. + */ + public static function validate_object( $valid, $param, $request ) { + if ( \is_wp_error( $request ) ) { + return $valid; + } + + $json_params = $request->get_json_params(); + + if ( empty( $json_params['type'] ) ) { + return false; + } + + if ( 'QuoteRequest' !== $json_params['type'] ) { + return $valid; + } + + $required_attributes = array( + 'actor', + 'object', + 'instrument', + ); + + if ( ! empty( \array_diff( $required_attributes, \array_keys( $json_params ) ) ) ) { + return false; + } + + return $valid; + } +} diff --git a/includes/model/class-blog.php b/includes/model/class-blog.php index 22e8d49e3..17e918889 100644 --- a/includes/model/class-blog.php +++ b/includes/model/class-blog.php @@ -96,7 +96,7 @@ public function get_id() { return \esc_url( \trailingslashit( get_home_url() ) . '@' . $this->get_preferred_username() ); } - return \add_query_arg( 'author', $this->_id, \trailingslashit( \home_url() ) ); + return \add_query_arg( 'author', $this->_id, \home_url( '/' ) ); } /** diff --git a/includes/model/class-user.php b/includes/model/class-user.php index 763a05972..9bdb66661 100644 --- a/includes/model/class-user.php +++ b/includes/model/class-user.php @@ -122,7 +122,7 @@ public function get_id() { return $this->get_url(); } - return \add_query_arg( 'author', $this->_id, \trailingslashit( \home_url() ) ); + return \add_query_arg( 'author', $this->_id, \home_url( '/' ) ); } /** diff --git a/includes/rest/class-actors-inbox-controller.php b/includes/rest/class-actors-inbox-controller.php index 86ed35cd3..d8ec2fd19 100644 --- a/includes/rest/class-actors-inbox-controller.php +++ b/includes/rest/class-actors-inbox-controller.php @@ -10,6 +10,7 @@ use Activitypub\Activity\Activity; use Activitypub\Moderation; +use function Activitypub\camel_to_snake_case; use function Activitypub\get_context; use function Activitypub\get_masked_wp_version; use function Activitypub\get_rest_url_by_path; @@ -160,7 +161,7 @@ public function get_items( $request ) { public function create_item( $request ) { $user_id = $request->get_param( 'user_id' ); $data = $request->get_json_params(); - $type = \strtolower( $request->get_param( 'type' ) ); + $type = camel_to_snake_case( $request->get_param( 'type' ) ); /* @var Activity $activity Activity object.*/ $activity = Activity::init_from_array( $data ); diff --git a/includes/rest/class-inbox-controller.php b/includes/rest/class-inbox-controller.php index e6c0fd688..4aa260c79 100644 --- a/includes/rest/class-inbox-controller.php +++ b/includes/rest/class-inbox-controller.php @@ -11,6 +11,7 @@ use Activitypub\Collection\Actors; use Activitypub\Moderation; +use function Activitypub\camel_to_snake_case; use function Activitypub\extract_recipients_from_activity; use function Activitypub\is_same_domain; use function Activitypub\user_can_activitypub; @@ -132,7 +133,7 @@ public function register_routes() { */ public function create_item( $request ) { $data = $request->get_json_params(); - $type = \strtolower( $request->get_param( 'type' ) ); + $type = camel_to_snake_case( $request->get_param( 'type' ) ); /* @var Activity $activity Activity object.*/ $activity = Activity::init_from_array( $data ); diff --git a/includes/transformer/class-post.php b/includes/transformer/class-post.php index accd89876..156dbd5ce 100644 --- a/includes/transformer/class-post.php +++ b/includes/transformer/class-post.php @@ -130,7 +130,7 @@ public function get_id() { if ( $post_id > $last_legacy_id ) { // Generate URI based on post ID. - return \add_query_arg( 'p', $post_id, \trailingslashit( \home_url() ) ); + return \add_query_arg( 'p', $post_id, \home_url( '/' ) ); } return $this->get_url(); diff --git a/tests/includes/class-test-functions.php b/tests/includes/class-test-functions.php index a02b7aafc..9374893dc 100644 --- a/tests/includes/class-test-functions.php +++ b/tests/includes/class-test-functions.php @@ -1372,4 +1372,38 @@ public function test_get_activity_visibility_with_minimal_activity() { $result = \Activitypub\get_activity_visibility( $activity ); $this->assertSame( ACTIVITYPUB_CONTENT_VISIBILITY_PUBLIC, $result, 'Should work with minimal activity data' ); } + + /** + * Data provider for camel to snake case and snake to camel case tests. + * + * @return array + */ + public function camel_snake_case_provider() { + return array( + 'SimpleCamelCase' => array( 'SimpleCamelCase', 'simple_camel_case' ), + 'camelCase' => array( 'camelCase', 'camel_case' ), + 'XMLHttpRequest' => array( 'XMLHttpRequest', 'x_m_l_http_request' ), + 'already_snake_case' => array( 'already_snake_case', 'already_snake_case' ), + 'with_numbers123' => array( 'withNumbers123', 'with_numbers123' ), + 'leadingUpperCase' => array( 'LeadingUpperCase', 'leading_upper_case' ), + 'singleletter' => array( 'a', 'a' ), + 'emptyString' => array( '', '' ), + 'nonStringInput' => array( 12345, '12345' ), + 'CreateActivity' => array( 'CreateActivity', 'create_activity' ), + 'Follow' => array( 'Follow', 'follow' ), + 'QuoteRequest' => array( 'QuoteRequest', 'quote_request' ), + ); + } + + /** + * Test camel_to_snake_case function. + * + * @dataProvider camel_snake_case_provider + * + * @param string $original The original string. + * @param string $expected The expected result. + */ + public function test_camel_to_snake_case( $original, $expected ) { + $this->assertSame( $expected, \Activitypub\camel_to_snake_case( $original ) ); + } } diff --git a/tests/includes/class-test-query.php b/tests/includes/class-test-query.php index 84fc5442f..5dec259bc 100644 --- a/tests/includes/class-test-query.php +++ b/tests/includes/class-test-query.php @@ -399,4 +399,123 @@ public function test_should_negotiate_content() { \delete_option( 'activitypub_content_negotiation' ); \delete_option( 'permalink_structure' ); } + + /** + * Test maybe_get_stamp method for QuoteAuthorization objects. + * + * @covers ::maybe_get_stamp + * @covers ::get_activitypub_object + * @covers ::get_activitypub_object_id + */ + public function test_maybe_get_stamp() { + // Create a post meta entry to simulate a quote authorization stamp. + $meta_id = \add_post_meta( self::$post_id, '_activitypub_quoted_by', 'https://remote.example.com/posts/456' ); + + // Test with valid stamp query parameter. + Query::get_instance()->__destruct(); + $this->go_to( home_url( '/?p=' . self::$post_id . '&stamp=' . $meta_id ) ); + \set_query_var( 'stamp', $meta_id ); + + $query = Query::get_instance(); + $object = $query->get_activitypub_object(); + + // Test that we get a QuoteAuthorization object. + $this->assertNotNull( $object, 'Should create QuoteAuthorization object for valid stamp' ); + $this->assertEquals( 'QuoteAuthorization', $object->get_type(), 'Should be QuoteAuthorization type' ); + + // Test the object properties. + $expected_id = \add_query_arg( + array( + 'p' => self::$post_id, + 'stamp' => $meta_id, + ), + \home_url( '/' ) + ); + $this->assertEquals( $expected_id, $object->get_id(), 'Should have correct stamp URI as ID' ); + + // Test object ID separately. + $this->assertEquals( $expected_id, $query->get_activitypub_object_id(), 'Should return correct object ID' ); + + // Test with invalid stamp. + Query::get_instance()->__destruct(); + $this->go_to( home_url( '/?p=' . self::$post_id . '&stamp=999999' ) ); + \set_query_var( 'stamp', '999999' ); + + $query = Query::get_instance(); + $object = $query->get_activitypub_object(); + + // Should fall back to regular post object. + $this->assertNotNull( $object, 'Should fall back to post object for invalid stamp' ); + $this->assertNotEquals( 'QuoteAuthorization', $object->get_type(), 'Should not be QuoteAuthorization for invalid stamp' ); + + // Test without stamp parameter. + Query::get_instance()->__destruct(); + $this->go_to( home_url( '/?p=' . self::$post_id ) ); + + $query = Query::get_instance(); + $object = $query->get_activitypub_object(); + + // Should get regular post object. + $this->assertNotNull( $object, 'Should get post object without stamp parameter' ); + $this->assertNotEquals( 'QuoteAuthorization', $object->get_type(), 'Should not be QuoteAuthorization without stamp parameter' ); + + // Clean up. + \delete_post_meta( self::$post_id, '_activitypub_quoted_by' ); + } + + /** + * Test maybe_get_stamp with non-existent meta ID. + * + * @covers ::maybe_get_stamp + */ + public function test_maybe_get_stamp_invalid_meta() { + // Test with non-existent meta ID. + Query::get_instance()->__destruct(); + $this->go_to( home_url( '/?p=' . self::$post_id . '&stamp=999999' ) ); + \set_query_var( 'stamp', '999999' ); + + $reflection = new \ReflectionClass( Query::class ); + $method = $reflection->getMethod( 'maybe_get_stamp' ); + $method->setAccessible( true ); + + $query = Query::get_instance(); + $result = $method->invoke( $query ); + + $this->assertFalse( $result, 'Should return false for non-existent meta ID' ); + } + + /** + * Test maybe_get_stamp with invalid post author. + * + * @covers ::maybe_get_stamp + */ + public function test_maybe_get_stamp_invalid_author() { + // Create a post with invalid author. + $post_id = self::factory()->post->create( + array( + 'post_author' => 999999, // Non-existent user ID. + 'post_title' => 'Test Post Invalid Author', + 'post_content' => 'Test Content', + 'post_status' => 'publish', + ) + ); + + $meta_id = \add_post_meta( $post_id, '_activitypub_quoted_by', 'https://remote.example.com/posts/456' ); + + Query::get_instance()->__destruct(); + $this->go_to( home_url( '/?p=' . $post_id . '&stamp=' . $meta_id ) ); + \set_query_var( 'stamp', $meta_id ); + + $reflection = new \ReflectionClass( Query::class ); + $method = $reflection->getMethod( 'maybe_get_stamp' ); + $method->setAccessible( true ); + + $query = Query::get_instance(); + $result = $method->invoke( $query ); + + $this->assertFalse( $result, 'Should return false for invalid post author' ); + + // Clean up. + \wp_delete_post( $post_id, true ); + } } diff --git a/tests/includes/handler/class-test-quote-request.php b/tests/includes/handler/class-test-quote-request.php new file mode 100644 index 000000000..346363477 --- /dev/null +++ b/tests/includes/handler/class-test-quote-request.php @@ -0,0 +1,491 @@ + 999, + 'user_url' => 'https://remote.example.com/users/remote_user', + ); + } + + /** + * Set up each test. + */ + public function set_up() { + parent::set_up(); + + // Create a fresh post for each test since parent::tear_down() deletes all posts. + self::$post_id = self::factory()->post->create( + array( + 'post_author' => self::$user_id, + 'post_content' => 'Test post content', + 'post_title' => 'Test Post', + 'post_status' => 'publish', + ) + ); + + // Initialize the Quote Request handler. + Quote_Request::init(); + } + + /** + * Create a sample QuoteRequest activity. + * + * @param string $actor_uri The actor URI. + * @return array The activity array. + */ + private function create_quote_request_activity( $actor_uri = 'https://remote.example.com/users/remote_user' ) { + return array( + 'id' => 'https://remote.example.com/activities/123', + 'type' => 'QuoteRequest', + 'actor' => $actor_uri, + 'object' => \get_permalink( self::$post_id ), + 'instrument' => 'https://remote.example.com/posts/456', + ); + } + + /** + * Data provider for quote request policy tests. + * + * @return array Test cases with policy, setup callback, and expected response type. + */ + public function policy_test_data() { + return array( + 'default (no policy) - should accept' => array( + 'policy' => '', + 'setup_callback' => null, + 'expected_type' => 'Accept', + 'expected_result' => true, + ), + 'anyone policy - should accept' => array( + 'policy' => ACTIVITYPUB_INTERACTION_POLICY_ANYONE, + 'setup_callback' => null, + 'expected_type' => 'Accept', + 'expected_result' => true, + ), + 'me policy - should reject' => array( + 'policy' => ACTIVITYPUB_INTERACTION_POLICY_ME, + 'setup_callback' => null, + 'expected_type' => 'Reject', + 'expected_result' => true, + ), + 'followers policy with follower - should accept' => array( + 'policy' => ACTIVITYPUB_INTERACTION_POLICY_FOLLOWERS, + 'setup_callback' => 'add_follower', + 'expected_type' => 'Accept', + 'expected_result' => true, + ), + 'followers policy with non-follower - should reject' => array( + 'policy' => ACTIVITYPUB_INTERACTION_POLICY_FOLLOWERS, + 'setup_callback' => null, + 'expected_type' => 'Reject', + 'expected_result' => true, + ), + 'followers policy with actor error - should reject' => array( + 'policy' => ACTIVITYPUB_INTERACTION_POLICY_FOLLOWERS, + 'setup_callback' => 'mock_actor_error', + 'expected_type' => 'Reject', + 'expected_result' => true, + ), + ); + } + + /** + * Test QuoteRequest handling with various policies. + * + * @dataProvider policy_test_data + * @covers ::handle_quote_request + * + * @param string $policy The interaction policy to set. + * @param string|null $setup_callback Optional setup callback method name. + * @param string $expected_type Expected activity type (Accept/Reject). + * @param bool $expected_result Expected test result. + */ + public function test_handle_quote_request_policies( $policy, $setup_callback, $expected_type, $expected_result ) { + // Set policy if provided. + if ( ! empty( $policy ) ) { + update_post_meta( self::$post_id, 'activitypub_interaction_policy_quote', $policy ); + } + + $activity = $this->create_quote_request_activity(); + $actor_url = $activity['actor']; + + // Mock HTTP requests for actor metadata. + add_filter( + 'pre_get_remote_metadata_by_actor', + function () use ( $actor_url ) { + return array( + 'id' => $actor_url, + 'actor' => $actor_url, + 'type' => 'Person', + 'inbox' => str_replace( '/users/', '/inbox/', $actor_url ), + ); + } + ); + + $remote_actor_id = false; + + // Run setup callback if provided. + if ( 'add_follower' === $setup_callback ) { + $remote_actor_id = Followers::add_follower( self::$user_id, $actor_url ); + $this->assertNotFalse( $remote_actor_id, 'Should successfully add follower' ); + } elseif ( 'mock_actor_error' === $setup_callback ) { + // Override the actor metadata filter to return an error. + remove_all_filters( 'pre_get_remote_metadata_by_actor' ); + add_filter( + 'pre_get_remote_metadata_by_actor', + function () { + return new \WP_Error( 'not_found', 'Actor not found' ); + } + ); + } + + // Handle the quote request. + Quote_Request::handle_quote_request( $activity, self::$user_id ); + + // Check outbox for expected response. + $outbox_posts = get_posts( + array( + 'post_type' => Outbox::POST_TYPE, + 'post_status' => 'pending', + 'author' => self::$user_id, + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + 'meta_query' => array( + array( + 'key' => '_activitypub_activity_type', + 'value' => $expected_type, + ), + ), + ) + ); + + if ( $expected_result ) { + $this->assertNotEmpty( $outbox_posts, "{$expected_type} activity should be queued" ); + + $outbox_post = $outbox_posts[0]; + $activity_json = json_decode( $outbox_post->post_content, true ); + + $this->assertEquals( $expected_type, $activity_json['type'] ); + $this->assertContains( $activity['actor'], $activity_json['to'] ); + } else { + $this->assertEmpty( $outbox_posts, "No {$expected_type} activity should be queued" ); + } + + // Clean up follower if created. + if ( $remote_actor_id ) { + wp_delete_post( $remote_actor_id, true ); + } + } + + /** + * Test handling of blocked QuoteRequest activities. + * + * @covers ::handle_blocked_request + */ + public function test_handle_blocked_request() { + $activity = $this->create_quote_request_activity(); + + Quote_Request::handle_blocked_request( $activity, self::$user_id, 'QuoteRequest' ); + + // Check outbox for Reject response. + $outbox_posts = get_posts( + array( + 'post_type' => Outbox::POST_TYPE, + 'post_status' => 'pending', + 'author' => self::$user_id, + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + 'meta_query' => array( + array( + 'key' => '_activitypub_activity_type', + 'value' => 'Reject', + ), + ), + ) + ); + + $this->assertNotEmpty( $outbox_posts, 'Reject activity should be queued for blocked request' ); + + $outbox_post = $outbox_posts[0]; + $activity_json = json_decode( $outbox_post->post_content, true ); + + $this->assertEquals( 'Reject', $activity_json['type'] ); + } + + /** + * Test that non-QuoteRequest types are ignored by handle_blocked_request. + * + * @covers ::handle_blocked_request + */ + public function test_handle_blocked_request_ignores_other_types() { + $activity = $this->create_quote_request_activity(); + + Quote_Request::handle_blocked_request( $activity, self::$user_id, 'Follow' ); + + // Check that no outbox activity was created. + $outbox_posts = get_posts( + array( + 'post_type' => Outbox::POST_TYPE, + 'post_status' => 'pending', + 'author' => self::$user_id, + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + 'meta_query' => array( + array( + 'key' => '_activitypub_activity_type', + 'value' => 'Follow', + ), + ), + ) + ); + + $this->assertEmpty( $outbox_posts, 'Should not handle non-QuoteRequest activities' ); + } + + /** + * Test queue_accept method creates correct Accept activity. + * + * @covers ::queue_accept + */ + public function test_queue_accept() { + $activity = $this->create_quote_request_activity(); + + Quote_Request::queue_accept( $activity, self::$user_id, self::$post_id ); + + // Check outbox for Accept response. + $outbox_posts = get_posts( + array( + 'post_type' => Outbox::POST_TYPE, + 'post_status' => 'pending', + 'author' => self::$user_id, + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + 'meta_query' => array( + array( + 'key' => '_activitypub_activity_type', + 'value' => 'Accept', + ), + ), + ) + ); + + $this->assertNotEmpty( $outbox_posts, 'Accept activity should be created' ); + + $outbox_post = $outbox_posts[0]; + $activity_json = json_decode( $outbox_post->post_content, true ); + $visibility = get_post_meta( $outbox_post->ID, 'activitypub_content_visibility', true ); + + $this->assertEquals( 'Accept', $activity_json['type'] ); + $this->assertEquals( 'private', $visibility ); + $this->assertContains( $activity['actor'], $activity_json['to'] ); + + // Check that the activity object contains only minimal data. + $expected_keys = array( 'id', 'type', 'object', 'actor', 'instrument' ); + $actual_keys = array_keys( $activity_json['object'] ); + $this->assertEmpty( array_diff( $expected_keys, $actual_keys ), 'All expected keys should be present' ); + $this->assertEmpty( array_diff( $actual_keys, $expected_keys ), 'No unexpected keys should be present' ); + } + + /** + * Test queue_reject method creates correct Reject activity. + * + * @covers ::queue_reject + */ + public function test_queue_reject() { + $activity = $this->create_quote_request_activity(); + + Quote_Request::queue_reject( $activity, self::$user_id ); + + // Check outbox for Reject response. + $outbox_posts = get_posts( + array( + 'post_type' => Outbox::POST_TYPE, + 'post_status' => 'pending', + 'author' => self::$user_id, + // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query + 'meta_query' => array( + array( + 'key' => '_activitypub_activity_type', + 'value' => 'Reject', + ), + ), + ) + ); + + $this->assertNotEmpty( $outbox_posts, 'Reject activity should be created' ); + + $outbox_post = $outbox_posts[0]; + $activity_json = json_decode( $outbox_post->post_content, true ); + $visibility = get_post_meta( $outbox_post->ID, 'activitypub_content_visibility', true ); + + $this->assertEquals( 'Reject', $activity_json['type'] ); + $this->assertEquals( 'private', $visibility ); + $this->assertContains( $activity['actor'], $activity_json['to'] ); + + // Check that the activity object contains only minimal data. + $expected_keys = array( 'id', 'type', 'object', 'actor', 'instrument' ); + $actual_keys = array_keys( $activity_json['object'] ); + $this->assertEmpty( array_diff( $expected_keys, $actual_keys ), 'All expected keys should be present' ); + $this->assertEmpty( array_diff( $actual_keys, $expected_keys ), 'No unexpected keys should be present' ); + } + + /** + * Test validate_object with valid QuoteRequest. + * + * @covers ::validate_object + */ + public function test_validate_object_valid_quote_request() { + $request_data = array( + 'type' => 'QuoteRequest', + 'actor' => 'https://remote.example.com/users/remote_user', + 'object' => get_permalink( self::$post_id ), + 'instrument' => 'https://remote.example.com/posts/456', + ); + + $request = new \WP_REST_Request(); + $request->set_body( \wp_json_encode( $request_data ) ); + $request->set_header( 'content-type', 'application/json' ); + + $result = Quote_Request::validate_object( true, 'object', $request ); + + $this->assertTrue( $result, 'Valid QuoteRequest should pass validation' ); + } + + /** + * Test validate_object with missing required attributes. + * + * @covers ::validate_object + */ + public function test_validate_object_missing_required_attributes() { + $request_data = array( + 'type' => 'QuoteRequest', + 'actor' => 'https://remote.example.com/users/remote_user', + // Missing 'object' and 'instrument'. + ); + + $request = new \WP_REST_Request(); + $request->set_body( \wp_json_encode( $request_data ) ); + $request->set_header( 'content-type', 'application/json' ); + + $result = Quote_Request::validate_object( true, 'object', $request ); + + $this->assertFalse( $result, 'QuoteRequest missing required attributes should fail validation' ); + } + + /** + * Test validate_object with non-QuoteRequest type. + * + * @covers ::validate_object + */ + public function test_validate_object_non_quote_request_type() { + $request_data = array( + 'type' => 'Follow', + 'actor' => 'https://remote.example.com/users/remote_user', + 'object' => get_permalink( self::$post_id ), + ); + + $request = new \WP_REST_Request(); + $request->set_body( \wp_json_encode( $request_data ) ); + $request->set_header( 'content-type', 'application/json' ); + + $result = Quote_Request::validate_object( true, 'object', $request ); + + $this->assertTrue( $result, 'Non-QuoteRequest types should pass through unchanged' ); + } + + /** + * Test validate_object with no type specified. + * + * @covers ::validate_object + */ + public function test_validate_object_no_type() { + $request_data = array( + 'actor' => 'https://remote.example.com/users/remote_user', + 'object' => get_permalink( self::$post_id ), + ); + + $request = new \WP_REST_Request(); + $request->set_body( \wp_json_encode( $request_data ) ); + $request->set_header( 'content-type', 'application/json' ); + + $result = Quote_Request::validate_object( true, 'object', $request ); + + $this->assertFalse( $result, 'Request without type should fail validation' ); + } + + /** + * Test validate_object with WP_Error request. + * + * @covers ::validate_object + */ + public function test_validate_object_with_wp_error() { + $request = new \WP_Error( 'invalid_request', 'Invalid request' ); + + $result = Quote_Request::validate_object( true, 'object', $request ); + + $this->assertTrue( $result, 'Should pass through original validation result when request is WP_Error' ); + } + + /** + * Test that init method properly registers hooks. + * + * @covers ::init + */ + public function test_init_registers_hooks() { + // Remove existing hooks first. + remove_all_actions( 'activitypub_inbox_quote_request' ); + remove_all_actions( 'activitypub_rest_inbox_disallowed' ); + remove_all_filters( 'activitypub_validate_object' ); + + // Call init. + Quote_Request::init(); + + // Check that hooks are registered. + $this->assertTrue( has_action( 'activitypub_inbox_quote_request' ) ); + $this->assertTrue( has_action( 'activitypub_rest_inbox_disallowed' ) ); + $this->assertTrue( has_filter( 'activitypub_validate_object' ) ); + } + + /** + * Clean up filters after each test. + */ + public function tear_down() { + // Remove all the filters we added during tests. + remove_all_filters( 'pre_get_remote_metadata_by_actor' ); + + parent::tear_down(); + } +} From 0ba4416ad764c52dd89ced87b710bf1b1b2a45ea Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Wed, 1 Oct 2025 15:24:10 +0200 Subject: [PATCH 27/52] Release 7.5.0 (#2253) --- .github/changelog/2193-from-description | 4 --- .github/changelog/2195-from-description | 4 --- .github/changelog/2200-from-description | 4 --- .github/changelog/2206-from-description | 4 --- .github/changelog/2207-from-description | 4 --- .github/changelog/2209-from-description | 4 --- .github/changelog/2210-from-description | 4 --- .github/changelog/2211-from-description | 4 --- .github/changelog/2221-from-description | 4 --- .github/changelog/2223-from-description | 4 --- .github/changelog/2226-from-description | 4 --- .github/changelog/2230-from-description | 4 --- .github/changelog/2231-from-description | 4 --- .github/changelog/2232-from-description | 4 --- .github/changelog/2233-from-description | 4 --- .github/changelog/2235-from-description | 4 --- .github/changelog/2240-from-description | 4 --- .github/changelog/2241-from-description | 4 --- .github/changelog/2243-from-description | 4 --- .github/changelog/2246-from-description | 4 --- CHANGELOG.md | 28 ++++++++++++++++ activitypub.php | 4 +-- .../class-quote-authorization.php | 2 +- includes/class-activitypub.php | 4 +-- includes/class-comment.php | 2 +- includes/class-migration.php | 2 +- includes/class-notification.php | 12 +++---- includes/class-scheduler.php | 2 +- includes/handler/class-follow.php | 4 +-- .../wp-admin/table/class-blocked-actors.php | 2 +- includes/wp-admin/table/class-followers.php | 2 +- includes/wp-admin/table/class-following.php | 2 +- readme.txt | 33 +++++++++++++++++-- 33 files changed, 77 insertions(+), 102 deletions(-) delete mode 100644 .github/changelog/2193-from-description delete mode 100644 .github/changelog/2195-from-description delete mode 100644 .github/changelog/2200-from-description delete mode 100644 .github/changelog/2206-from-description delete mode 100644 .github/changelog/2207-from-description delete mode 100644 .github/changelog/2209-from-description delete mode 100644 .github/changelog/2210-from-description delete mode 100644 .github/changelog/2211-from-description delete mode 100644 .github/changelog/2221-from-description delete mode 100644 .github/changelog/2223-from-description delete mode 100644 .github/changelog/2226-from-description delete mode 100644 .github/changelog/2230-from-description delete mode 100644 .github/changelog/2231-from-description delete mode 100644 .github/changelog/2232-from-description delete mode 100644 .github/changelog/2233-from-description delete mode 100644 .github/changelog/2235-from-description delete mode 100644 .github/changelog/2240-from-description delete mode 100644 .github/changelog/2241-from-description delete mode 100644 .github/changelog/2243-from-description delete mode 100644 .github/changelog/2246-from-description diff --git a/.github/changelog/2193-from-description b/.github/changelog/2193-from-description deleted file mode 100644 index 3f85497ff..000000000 --- a/.github/changelog/2193-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Add Yoast SEO integration for author archives site health check. diff --git a/.github/changelog/2195-from-description b/.github/changelog/2195-from-description deleted file mode 100644 index 8d56d1436..000000000 --- a/.github/changelog/2195-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Improved compatibility by making the 'implements' field always use multiple entries. diff --git a/.github/changelog/2200-from-description b/.github/changelog/2200-from-description deleted file mode 100644 index ef125eeff..000000000 --- a/.github/changelog/2200-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix Flag activity object list processing to preserve URL arrays diff --git a/.github/changelog/2206-from-description b/.github/changelog/2206-from-description deleted file mode 100644 index f9da0519d..000000000 --- a/.github/changelog/2206-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Improved checks to better identify public Activities. diff --git a/.github/changelog/2207-from-description b/.github/changelog/2207-from-description deleted file mode 100644 index 489ab55b9..000000000 --- a/.github/changelog/2207-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Added a setting to control who can quote your posts. diff --git a/.github/changelog/2209-from-description b/.github/changelog/2209-from-description deleted file mode 100644 index d66cbcedc..000000000 --- a/.github/changelog/2209-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: changed - -Clarify error messages in account modal to specify full profile URL format. diff --git a/.github/changelog/2210-from-description b/.github/changelog/2210-from-description deleted file mode 100644 index 7ea0a108f..000000000 --- a/.github/changelog/2210-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Improved recipient handling for clarity and improved visibility handling of activities. diff --git a/.github/changelog/2211-from-description b/.github/changelog/2211-from-description deleted file mode 100644 index b7b3d7e5e..000000000 --- a/.github/changelog/2211-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Remote reply blocks now sync account info across all blocks on the same page diff --git a/.github/changelog/2221-from-description b/.github/changelog/2221-from-description deleted file mode 100644 index cb7ae0a50..000000000 --- a/.github/changelog/2221-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Improved interaction policies with clearer defaults and better Mastodon compatibility. diff --git a/.github/changelog/2223-from-description b/.github/changelog/2223-from-description deleted file mode 100644 index 572701e6b..000000000 --- a/.github/changelog/2223-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Standardized notification handling with new hooks for better extensibility and consistency. diff --git a/.github/changelog/2226-from-description b/.github/changelog/2226-from-description deleted file mode 100644 index dfa6a5418..000000000 --- a/.github/changelog/2226-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Sync following meta to enable RSS feed subscriptions for ActivityPub actors in WordPress.com Reader diff --git a/.github/changelog/2230-from-description b/.github/changelog/2230-from-description deleted file mode 100644 index aea29a2ce..000000000 --- a/.github/changelog/2230-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fix PHP warning in bulk edit scenario when post_author is missing from $_REQUEST diff --git a/.github/changelog/2231-from-description b/.github/changelog/2231-from-description deleted file mode 100644 index 85cfaeba8..000000000 --- a/.github/changelog/2231-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -New site health check warns if active Captcha plugins may block ActivityPub comments. diff --git a/.github/changelog/2232-from-description b/.github/changelog/2232-from-description deleted file mode 100644 index cbe318048..000000000 --- a/.github/changelog/2232-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Fixed an issue where post metadata in the block editor was missing or failed to update. diff --git a/.github/changelog/2233-from-description b/.github/changelog/2233-from-description deleted file mode 100644 index 105c2d8ad..000000000 --- a/.github/changelog/2233-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Updated sync allowlist to add support for Jetpack notifications of likes and reposts. diff --git a/.github/changelog/2235-from-description b/.github/changelog/2235-from-description deleted file mode 100644 index 82dc34bab..000000000 --- a/.github/changelog/2235-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: changed - -Added support for fetching actors by account identifiers and improved reliability of actor retrieval. diff --git a/.github/changelog/2240-from-description b/.github/changelog/2240-from-description deleted file mode 100644 index 7859dea42..000000000 --- a/.github/changelog/2240-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -Added support for QuoteRequest activities (FEP-044f), enabling proper handling, validation, and policy-based acceptance or rejection of quote requests. diff --git a/.github/changelog/2241-from-description b/.github/changelog/2241-from-description deleted file mode 100644 index 7d4e76945..000000000 --- a/.github/changelog/2241-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: minor -Type: added - -You can now follow people and see their updates right in the WordPress.com Reader when using Jetpack or WordPress.com. diff --git a/.github/changelog/2243-from-description b/.github/changelog/2243-from-description deleted file mode 100644 index a4eafa247..000000000 --- a/.github/changelog/2243-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: added - -Add upgrade routine to enable ActivityPub feeds in WordPress.com Reader diff --git a/.github/changelog/2246-from-description b/.github/changelog/2246-from-description deleted file mode 100644 index 567b5b97d..000000000 --- a/.github/changelog/2246-from-description +++ /dev/null @@ -1,4 +0,0 @@ -Significance: patch -Type: fixed - -Posts now only fall back to the blog user when blog mode is enabled and no valid author exists, ensuring content negotiation only runs if an Actor is available. diff --git a/CHANGELOG.md b/CHANGELOG.md index af1aa3232..5fe84b9e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,33 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [7.5.0] - 2025-10-01 +### Added +- Added a setting to control who can quote your posts. [#2207] +- Added support for QuoteRequest activities (FEP-044f), enabling proper handling, validation, and policy-based acceptance or rejection of quote requests. [#2240] +- Add upgrade routine to enable ActivityPub feeds in WordPress.com Reader [#2243] +- Add Yoast SEO integration for author archives site health check. [#2193] +- Improved interaction policies with clearer defaults and better Mastodon compatibility. [#2221] +- New site health check warns if active Captcha plugins may block ActivityPub comments. [#2231] +- Sync following meta to enable RSS feed subscriptions for ActivityPub actors in WordPress.com Reader [#2226] +- You can now follow people and see their updates right in the WordPress.com Reader when using Jetpack or WordPress.com. [#2241] + +### Changed +- Added support for fetching actors by account identifiers and improved reliability of actor retrieval. [#2235] +- Clarify error messages in account modal to specify full profile URL format. [#2209] +- Improved checks to better identify public Activities. [#2206] +- Improved compatibility by making the 'implements' field always use multiple entries. [#2195] +- Improved recipient handling for clarity and improved visibility handling of activities. [#2210] +- Remote reply blocks now sync account info across all blocks on the same page [#2211] +- Standardized notification handling with new hooks for better extensibility and consistency. [#2223] +- Updated sync allowlist to add support for Jetpack notifications of likes and reposts. [#2233] + +### Fixed +- Fixed an issue where post metadata in the block editor was missing or failed to update. [#2232] +- Fix Flag activity object list processing to preserve URL arrays [#2200] +- Fix PHP warning in bulk edit scenario when post_author is missing from $_REQUEST [#2230] +- Posts now only fall back to the blog user when blog mode is enabled and no valid author exists, ensuring content negotiation only runs if an Actor is available. [#2246] + ## [7.4.0] - 2025-09-15 ### Added - Add activitypub_json REST field for ap_actor posts to access raw JSON data [#2121] @@ -1437,6 +1464,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - initial +[7.5.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.4.0...7.5.0 [7.4.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.3.0...7.4.0 [7.3.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.2.0...7.3.0 [7.2.0]: https://github.com/Automattic/wordpress-activitypub/compare/7.1.0...7.2.0 diff --git a/activitypub.php b/activitypub.php index ce6c3e29c..2b088614a 100644 --- a/activitypub.php +++ b/activitypub.php @@ -3,7 +3,7 @@ * Plugin Name: ActivityPub * Plugin URI: https://github.com/Automattic/wordpress-activitypub * Description: The ActivityPub protocol is a decentralized social networking protocol based upon the ActivityStreams 2.0 data format. - * Version: 7.4.0 + * Version: 7.5.0 * Author: Matthias Pfefferle & Automattic * Author URI: https://automattic.com/ * License: MIT @@ -17,7 +17,7 @@ namespace Activitypub; -\define( 'ACTIVITYPUB_PLUGIN_VERSION', '7.4.0' ); +\define( 'ACTIVITYPUB_PLUGIN_VERSION', '7.5.0' ); // Plugin related constants. \define( 'ACTIVITYPUB_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); diff --git a/includes/activity/extended-object/class-quote-authorization.php b/includes/activity/extended-object/class-quote-authorization.php index 140dd5012..74860e530 100644 --- a/includes/activity/extended-object/class-quote-authorization.php +++ b/includes/activity/extended-object/class-quote-authorization.php @@ -17,7 +17,7 @@ * * @see https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md#quoteauthorization * - * @since unreleased + * @since 7.5.0 * * @method Base_Object|string|array|null get_interacting_object() Gets the interacting object property of the object. * @method Base_Object|string|array|null get_interaction_target() Gets the interaction target property of the object. diff --git a/includes/class-activitypub.php b/includes/class-activitypub.php index 3bc36a361..74a9cfd7e 100644 --- a/includes/class-activitypub.php +++ b/includes/class-activitypub.php @@ -174,10 +174,10 @@ public static function flush_rewrite_rules() { /** * Add rewrite rules. * - * @deprecated unreleased Use {@see Router::add_rewrite_rules()}. + * @deprecated 7.5.0 Use {@see Router::add_rewrite_rules()}. */ public static function add_rewrite_rules() { - _deprecated_function( __FUNCTION__, 'unreleased', '\Activitypub\Router::add_rewrite_rules()' ); + _deprecated_function( __FUNCTION__, '7.5.0', '\Activitypub\Router::add_rewrite_rules()' ); Router::add_rewrite_rules(); } diff --git a/includes/class-comment.php b/includes/class-comment.php index 0ea1d6f60..ff90f6b39 100644 --- a/includes/class-comment.php +++ b/includes/class-comment.php @@ -561,7 +561,7 @@ public static function is_registered_comment_type( $slug ) { */ public static function get_comment_type_slugs() { if ( ! did_action( 'init' ) ) { - _doing_it_wrong( __METHOD__, 'This function should not be called before the init action has run. Comment types are only available after init.', 'unreleased' ); + _doing_it_wrong( __METHOD__, 'This function should not be called before the init action has run. Comment types are only available after init.', '7.5.0' ); return array(); } diff --git a/includes/class-migration.php b/includes/class-migration.php index 5965cc8dd..741b2f53a 100644 --- a/includes/class-migration.php +++ b/includes/class-migration.php @@ -205,7 +205,7 @@ public static function maybe_migrate() { self::remove_pending_application_user_follow_requests(); } - if ( \version_compare( $version_from_db, 'unreleased', '<' ) ) { + if ( \version_compare( $version_from_db, '7.5.0', '<' ) ) { self::sync_jetpack_following_meta(); } diff --git a/includes/class-notification.php b/includes/class-notification.php index df70f1061..9b22d4bc4 100644 --- a/includes/class-notification.php +++ b/includes/class-notification.php @@ -10,7 +10,7 @@ /** * Notification class. * - * @deprecated unreleased Use action hooks like 'activitypub_handled_{type}' instead. + * @deprecated 7.5.0 Use action hooks like 'activitypub_handled_{type}' instead. */ class Notification { /** @@ -50,7 +50,7 @@ class Notification { * @param int $target The WordPress User-Id. */ public function __construct( $type, $actor, $activity, $target ) { - \_deprecated_class( __CLASS__, 'unreleased', 'Use action hooks like "activitypub_handled_{type}" instead.' ); + \_deprecated_class( __CLASS__, '7.5.0', 'Use action hooks like "activitypub_handled_{type}" instead.' ); $this->type = $type; $this->actor = $actor; @@ -67,19 +67,19 @@ public function send() { /** * Action to send ActivityPub notifications. * - * @deprecated unreleased Use "activitypub_handled_{$type}" instead. + * @deprecated 7.5.0 Use "activitypub_handled_{$type}" instead. * * @param Notification $instance The notification object. */ - \do_action_deprecated( 'activitypub_notification', array( $this ), 'unreleased', "activitypub_handled_{$type}" ); + \do_action_deprecated( 'activitypub_notification', array( $this ), '7.5.0', "activitypub_handled_{$type}" ); /** * Type-specific action to send ActivityPub notifications. * - * @deprecated unreleased Use "activitypub_handled_{$type}" instead. + * @deprecated 7.5.0 Use "activitypub_handled_{$type}" instead. * * @param Notification $instance The notification object. */ - \do_action_deprecated( "activitypub_notification_{$type}", array( $this ), 'unreleased', "activitypub_handled_{$type}" ); + \do_action_deprecated( "activitypub_notification_{$type}", array( $this ), '7.5.0', "activitypub_handled_{$type}" ); } } diff --git a/includes/class-scheduler.php b/includes/class-scheduler.php index 7437a82ed..1cccdf066 100644 --- a/includes/class-scheduler.php +++ b/includes/class-scheduler.php @@ -75,7 +75,7 @@ public static function register_schedulers() { */ public static function register_async_batch_callback( $hook, $callback ) { if ( \did_action( 'init' ) && ! \doing_action( 'init' ) ) { - \_doing_it_wrong( __METHOD__, 'Async batch callbacks should be registered before or during the init action.', 'unreleased' ); + \_doing_it_wrong( __METHOD__, 'Async batch callbacks should be registered before or during the init action.', '7.5.0' ); return; } diff --git a/includes/handler/class-follow.php b/includes/handler/class-follow.php index 1c8478f7d..25e2b498c 100644 --- a/includes/handler/class-follow.php +++ b/includes/handler/class-follow.php @@ -52,14 +52,14 @@ public static function handle_follow( $activity, $user_id ) { /** * Fires after a new follower has been added. * - * @deprecated unreleased Use "activitypub_handled_follow" instead. + * @deprecated 7.5.0 Use "activitypub_handled_follow" instead. * * @param string $actor The URL of the actor (follower) who initiated the follow. * @param array $activity The complete activity data of the follow request. * @param int $user_id The ID of the WordPress user being followed. * @param \WP_Post|\WP_Error $remote_actor The Actor object containing the new follower's data. */ - \do_action_deprecated( 'activitypub_followers_post_follow', array( $activity['actor'], $activity, $user_id, $remote_actor ), 'unreleased', 'activitypub_handled_follow' ); + \do_action_deprecated( 'activitypub_followers_post_follow', array( $activity['actor'], $activity, $user_id, $remote_actor ), '7.5.0', 'activitypub_handled_follow' ); /** * Fires after a Follow activity has been handled. diff --git a/includes/wp-admin/table/class-blocked-actors.php b/includes/wp-admin/table/class-blocked-actors.php index 4b861eb87..85911ffb5 100644 --- a/includes/wp-admin/table/class-blocked-actors.php +++ b/includes/wp-admin/table/class-blocked-actors.php @@ -402,7 +402,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { * * This filter is evaluated for each blocked actor item in the list table. * - * @since unreleased + * @since 7.5.0 * * @param string[] $actions An array of row action links. Defaults are * 'Unblock'. diff --git a/includes/wp-admin/table/class-followers.php b/includes/wp-admin/table/class-followers.php index 2447957a6..84711b9b7 100644 --- a/includes/wp-admin/table/class-followers.php +++ b/includes/wp-admin/table/class-followers.php @@ -483,7 +483,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { * This filter allows you to modify the available row actions (such as Delete, Block, or Follow back) * for each follower item displayed in the table. * - * @since unreleased + * @since 7.5.0 * * @param string[] $actions An array of row action links. Defaults are * 'Delete', 'Block', and optionally 'Follow back'. diff --git a/includes/wp-admin/table/class-following.php b/includes/wp-admin/table/class-following.php index df38651c8..ff711f4fe 100644 --- a/includes/wp-admin/table/class-following.php +++ b/includes/wp-admin/table/class-following.php @@ -504,7 +504,7 @@ protected function handle_row_actions( $item, $column_name, $primary ) { * * This filter allows you to modify the row actions for each following item in the Following list table. * - * @since unreleased + * @since 7.5.0 * * @param string[] $actions An array of row action links. Defaults include 'Unfollow'. * @param array $item The current following item. diff --git a/readme.txt b/readme.txt index ebf8edb7b..2abdef656 100644 --- a/readme.txt +++ b/readme.txt @@ -3,7 +3,7 @@ Contributors: automattic, pfefferle, mattwiebe, obenland, akirk, jeherve, mediaf Tags: fediverse, activitypub, indieweb, activitystream, social web Requires at least: 6.5 Tested up to: 6.8 -Stable tag: 7.4.0 +Stable tag: 7.5.0 Requires PHP: 7.2 License: MIT License URI: http://opensource.org/licenses/MIT @@ -110,6 +110,33 @@ For reasons of data protection, it is not possible to see the followers of other == Changelog == +### 7.5.0 - 2025-10-01 +#### Added +- Added a setting to control who can quote your posts. +- Added support for QuoteRequest activities (FEP-044f), enabling proper handling, validation, and policy-based acceptance or rejection of quote requests. +- Add upgrade routine to enable ActivityPub feeds in WordPress.com Reader +- Add Yoast SEO integration for author archives site health check. +- Improved interaction policies with clearer defaults and better Mastodon compatibility. +- New site health check warns if active Captcha plugins may block ActivityPub comments. +- Sync following meta to enable RSS feed subscriptions for ActivityPub actors in WordPress.com Reader +- You can now follow people and see their updates right in the WordPress.com Reader when using Jetpack or WordPress.com. + +#### Changed +- Added support for fetching actors by account identifiers and improved reliability of actor retrieval. +- Clarify error messages in account modal to specify full profile URL format. +- Improved checks to better identify public Activities. +- Improved compatibility by making the 'implements' field always use multiple entries. +- Improved recipient handling for clarity and improved visibility handling of activities. +- Remote reply blocks now sync account info across all blocks on the same page +- Standardized notification handling with new hooks for better extensibility and consistency. +- Updated sync allowlist to add support for Jetpack notifications of likes and reposts. + +#### Fixed +- Fixed an issue where post metadata in the block editor was missing or failed to update. +- Fix Flag activity object list processing to preserve URL arrays +- Fix PHP warning in bulk edit scenario when post_author is missing from $_REQUEST +- Posts now only fall back to the blog user when blog mode is enabled and no valid author exists, ensuring content negotiation only runs if an Actor is available. + ### 7.4.0 - 2025-09-15 #### Added - Add activitypub_json REST field for ap_actor posts to access raw JSON data @@ -282,9 +309,9 @@ See full Changelog on [GitHub](https://github.com/Automattic/wordpress-activityp == Upgrade Notice == -= 7.3.0 = += 7.5.0 = -Moderation has been improved with stronger tools, and user deletion now includes support for federated deletes across the network. +You can now choose who’s allowed to quote your posts on Mastodon—everyone, only your followers, or just you. Set it in the Block Editor sidebar, and your choice will be applied automatically. == Installation == From b7874e73371bb2111d3fdc15651c2ea00901af28 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 1 Oct 2025 10:16:57 -0500 Subject: [PATCH 28/52] Fix release script to handle do_action_deprecated with double quotes (#2258) --- bin/__tests__/release.test.js | 44 +++++++++++++++++++++++++++++++---- bin/release.js | 2 +- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/bin/__tests__/release.test.js b/bin/__tests__/release.test.js index 4e1713380..6d7d08a3e 100644 --- a/bin/__tests__/release.test.js +++ b/bin/__tests__/release.test.js @@ -177,11 +177,11 @@ function old_function() {}`; } ); test( 'replaces unreleased in apply_filters_deprecated calls', () => { - const content = `$value = apply_filters_deprecated( - 'old_filter', - array( $value ), - 'unreleased', - 'new_filter' + const content = `$value = apply_filters_deprecated( + 'old_filter', + array( $value ), + 'unreleased', + 'new_filter' );`; const result = applyVersionReplacements( content, testVersion, patterns ); @@ -189,6 +189,40 @@ function old_function() {}`; expect( result ).not.toContain( `'unreleased',` ); } ); + test( 'replaces unreleased in do_action_deprecated calls with single quotes', () => { + const content = `do_action_deprecated( 'old_action', array( $this ), 'unreleased', 'new_action' );`; + + const doActionPatterns = [ + { + search: /(?<=\b(?:apply_filters_deprecated|do_action_deprecated)\s*\(\s*'.*?'\s*,\s*array\s*\(.*?\)\s*,\s*')unreleased(?=['"],\s*['"])/gi, + replace: testVersion, + }, + ]; + + const result = applyVersionReplacements( content, testVersion, doActionPatterns ); + expect( result ).toContain( + `do_action_deprecated( 'old_action', array( $this ), '${ testVersion }', 'new_action' )` + ); + expect( result ).not.toContain( `'unreleased'` ); + } ); + + test( 'replaces unreleased in do_action_deprecated calls with double quotes', () => { + const content = `\\do_action_deprecated( 'activitypub_notification', array( $this ), 'unreleased', "new_action" );`; + + const doActionPatterns = [ + { + search: /(?<=\b(?:apply_filters_deprecated|do_action_deprecated)\s*\(\s*'.*?'\s*,\s*array\s*\(.*?\)\s*,\s*')unreleased(?=['"],\s*['"])/gi, + replace: testVersion, + }, + ]; + + const result = applyVersionReplacements( content, testVersion, doActionPatterns ); + expect( result ).toContain( + `\\do_action_deprecated( 'activitypub_notification', array( $this ), '${ testVersion }', "new_action" )` + ); + expect( result ).not.toContain( `'unreleased'` ); + } ); + test( 'handles case insensitive @since and @deprecated', () => { const content = `/** * @Since unreleased diff --git a/bin/release.js b/bin/release.js index ea5c90102..785e32e3c 100755 --- a/bin/release.js +++ b/bin/release.js @@ -274,7 +274,7 @@ async function createRelease() { replace: ( match ) => match.replace( /unreleased/i, version ), }, { - search: /(?<=\b(?:apply_filters_deprecated|do_action_deprecated)\s*\(\s*'.*?'\s*,\s*array\s*\(.*?\)\s*,\s*')unreleased(?=',\s*['<=>])/gi, + search: /(?<=\b(?:apply_filters_deprecated|do_action_deprecated)\s*\(\s*'.*?'\s*,\s*array\s*\(.*?\)\s*,\s*')unreleased(?=['"],\s*['"])/gi, replace: ( match ) => match.replace( /unreleased/i, version ), }, ] ); From 9fd20eabab8a28eb127681e7eb5623d6000e7240 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Wed, 1 Oct 2025 17:26:02 +0200 Subject: [PATCH 29/52] Improve NodeInfo handling and add support for FEP-0151 (#2255) --- .github/changelog/2255-from-description | 4 + FEDERATION.md | 1 + includes/rest/class-nodeinfo-controller.php | 41 +- integration/class-nodeinfo.php | 64 ++- .../rest/class-test-nodeinfo-controller.php | 16 +- tests/integration/class-test-nodeinfo.php | 399 ++++++++++++++++++ 6 files changed, 499 insertions(+), 26 deletions(-) create mode 100644 .github/changelog/2255-from-description create mode 100644 tests/integration/class-test-nodeinfo.php diff --git a/.github/changelog/2255-from-description b/.github/changelog/2255-from-description new file mode 100644 index 000000000..160fddf0b --- /dev/null +++ b/.github/changelog/2255-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Added support for the latest NodeInfo (FEP-0151), with improved federation details, staff info, and software metadata for better ActivityPub compliance. diff --git a/FEDERATION.md b/FEDERATION.md index 8fc7af435..7a72ea4b0 100644 --- a/FEDERATION.md +++ b/FEDERATION.md @@ -13,6 +13,7 @@ The WordPress plugin largely follows ActivityPub's server-to-server specificatio ## Supported FEPs - [FEP-f1d5: NodeInfo in Fediverse Software](https://codeberg.org/fediverse/fep/src/branch/main/fep/f1d5/fep-f1d5.md) +- [FEP-0151: NodeInfo in Fediverse Software (2025 edition)](https://codeberg.org/fediverse/fep/src/branch/main/fep/0151/fep-0151.md) - [FEP-67ff: FEDERATION.md](https://codeberg.org/fediverse/fep/src/branch/main/fep/67ff/fep-67ff.md) - [FEP-5feb: Search indexing consent for actors](https://codeberg.org/fediverse/fep/src/branch/main/fep/5feb/fep-5feb.md) - [FEP-2677: Identifying the Application Actor](https://codeberg.org/fediverse/fep/src/branch/main/fep/2677/fep-2677.md) diff --git a/includes/rest/class-nodeinfo-controller.php b/includes/rest/class-nodeinfo-controller.php index 96c38544d..0f384f31e 100644 --- a/includes/rest/class-nodeinfo-controller.php +++ b/includes/rest/class-nodeinfo-controller.php @@ -7,10 +7,8 @@ namespace Activitypub\Rest; -use function Activitypub\get_active_users; use function Activitypub\get_masked_wp_version; use function Activitypub\get_rest_url_by_path; -use function Activitypub\get_total_users; /** * ActivityPub NodeInfo Controller. @@ -93,6 +91,14 @@ public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAna 'rel' => 'https://nodeinfo.diaspora.software/ns/schema/2.0', 'href' => get_rest_url_by_path( '/nodeinfo/2.0' ), ), + array( + 'rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.1', + 'href' => get_rest_url_by_path( '/nodeinfo/2.1' ), + ), + array( + 'rel' => 'https://nodeinfo.diaspora.software/ns/schema/2.1', + 'href' => get_rest_url_by_path( '/nodeinfo/2.1' ), + ), array( 'rel' => 'https://www.w3.org/ns/activitystreams#Application', 'href' => get_rest_url_by_path( 'application' ), @@ -121,7 +127,8 @@ public function get_item( $request ) { switch ( $version ) { case '2.0': - $response = $this->get_version_2_0(); + case '2.1': + $response = $this->get_version_2_X( $version ); break; default: @@ -135,30 +142,22 @@ public function get_item( $request ) { /** * Get the NodeInfo 2.0 data. * - * @return array + * @param string $version The NodeInfo version. + * + * @return array The NodeInfo data. */ - public function get_version_2_0() { + public function get_version_2_X( $version ) { $posts = \wp_count_posts(); $comments = \wp_count_comments(); - return array( - 'version' => '2.0', + $nodeinfo = array( + 'version' => $version, 'software' => array( 'name' => 'wordpress', 'version' => get_masked_wp_version(), ), - 'protocols' => array( 'activitypub' ), - 'services' => array( - 'inbound' => array(), - 'outbound' => array(), - ), 'openRegistrations' => (bool) get_option( 'users_can_register' ), 'usage' => array( - 'users' => array( - 'total' => get_total_users(), - 'activeHalfyear' => get_active_users( 6 ), - 'activeMonth' => get_active_users(), - ), 'localPosts' => (int) $posts->publish, 'localComments' => $comments->approved, ), @@ -168,5 +167,13 @@ public function get_version_2_0() { 'nodeIcon' => \get_site_icon_url(), ), ); + + /** + * Filter the NodeInfo data. + * + * @param array $nodeinfo The NodeInfo data. + * @param string $version The NodeInfo version. + */ + return \apply_filters( 'nodeinfo_data', $nodeinfo, $version ); } } diff --git a/integration/class-nodeinfo.php b/integration/class-nodeinfo.php index 9d60d51bc..f44af5b60 100644 --- a/integration/class-nodeinfo.php +++ b/integration/class-nodeinfo.php @@ -7,6 +7,8 @@ namespace Activitypub\Integration; +use Activitypub\Webfinger; + use function Activitypub\get_active_users; use function Activitypub\get_rest_url_by_path; use function Activitypub\get_total_users; @@ -36,19 +38,46 @@ public static function init() { * @return array The extended array. */ public static function add_nodeinfo_data( $nodeinfo, $version ) { - if ( $version >= '2.0' ) { - $nodeinfo['protocols'][] = 'activitypub'; - } else { - $nodeinfo['protocols']['inbound'][] = 'activitypub'; - $nodeinfo['protocols']['outbound'][] = 'activitypub'; + $nodeinfo = wp_parse_args( + $nodeinfo, + array( + 'version' => $version, + 'software' => array(), + 'usage' => array( + 'users' => array( + 'total' => 0, + 'activeMonth' => 0, + 'activeHalfyear' => 0, + ), + ), + 'protocols' => array(), + 'services' => array( + 'inbound' => array(), + 'outbound' => array(), + ), + 'metadata' => array(), + ) + ); + + if ( \version_compare( $version, '2.1', '>=' ) ) { + $nodeinfo['software']['homepage'] = 'https://wordpress.org/plugins/activitypub/'; + $nodeinfo['software']['repository'] = 'https://github.com/Automattic/wordpress-activitypub'; } + $nodeinfo['protocols'][] = 'activitypub'; + $nodeinfo['usage']['users'] = array( 'total' => get_total_users(), 'activeMonth' => get_active_users(), 'activeHalfyear' => get_active_users( 6 ), ); + $nodeinfo['metadata']['federation'] = array( 'enabled' => true ); + $nodeinfo['metadata']['staffAccounts'] = self::get_staff(); + + $nodeinfo['services']['inbound'][] = 'activitypub'; + $nodeinfo['services']['outbound'][] = 'activitypub'; + return $nodeinfo; } @@ -86,4 +115,29 @@ public static function add_wellknown_nodeinfo_data( $data ) { return $data; } + + /** + * Get all staff accounts (admin users with the "activitypub" capability) and return them in WebFinger resource format. + * + * @return array List of staff accounts in WebFinger resource format. + */ + private static function get_staff() { + // Get all admin users with the cap activitypub. + $admins = get_users( + array( + 'role' => 'administrator', + 'orderby' => 'ID', + 'order' => 'ASC', + 'cap' => 'activitypub', + 'fields' => array( 'ID' ), + ) + ); + + return array_map( + function ( $user ) { + return Webfinger::get_user_resource( $user->ID ); + }, + $admins + ); + } } diff --git a/tests/includes/rest/class-test-nodeinfo-controller.php b/tests/includes/rest/class-test-nodeinfo-controller.php index 65f6f9b01..c797a4f92 100644 --- a/tests/includes/rest/class-test-nodeinfo-controller.php +++ b/tests/includes/rest/class-test-nodeinfo-controller.php @@ -38,7 +38,7 @@ public function test_get_items() { $this->assertEquals( 200, $response->get_status() ); $this->assertArrayHasKey( 'links', $data ); - $this->assertCount( 3, $data['links'] ); + $this->assertCount( 5, $data['links'] ); /* * Test first link. @@ -53,8 +53,16 @@ public function test_get_items() { $this->assertStringEndsWith( '/nodeinfo/2.0', $data['links'][1]['href'] ); // Test third link. - $this->assertEquals( 'https://www.w3.org/ns/activitystreams#Application', $data['links'][2]['rel'] ); - $this->assertStringEndsWith( '/application', $data['links'][2]['href'] ); + $this->assertEquals( 'http://nodeinfo.diaspora.software/ns/schema/2.1', $data['links'][2]['rel'] ); + $this->assertStringEndsWith( '/nodeinfo/2.1', $data['links'][2]['href'] ); + + // Test forth link. + $this->assertEquals( 'https://nodeinfo.diaspora.software/ns/schema/2.1', $data['links'][3]['rel'] ); + $this->assertStringEndsWith( '/nodeinfo/2.1', $data['links'][3]['href'] ); + + // Test fifth link. + $this->assertEquals( 'https://www.w3.org/ns/activitystreams#Application', $data['links'][4]['rel'] ); + $this->assertStringEndsWith( '/application', $data['links'][4]['href'] ); // Make sure the links work. $request = new \WP_REST_Request( 'GET', str_replace( \get_rest_url(), '/', $data['links'][0]['href'] ) ); @@ -70,7 +78,7 @@ public function test_get_items() { * Test get_item method with valid version. * * @covers ::get_item - * @covers ::get_version_2_0 + * @covers ::get_version_2_X */ public function test_get_item() { self::factory()->post->create(); diff --git a/tests/integration/class-test-nodeinfo.php b/tests/integration/class-test-nodeinfo.php new file mode 100644 index 000000000..46bfed641 --- /dev/null +++ b/tests/integration/class-test-nodeinfo.php @@ -0,0 +1,399 @@ +user->create( + array( + 'role' => 'administrator', + ) + ); + + self::$user_ids['author'] = $factory->user->create( + array( + 'role' => 'author', + ) + ); + + self::$user_ids['subscriber'] = $factory->user->create( + array( + 'role' => 'subscriber', + ) + ); + + // Give the admin user activitypub capability. + $admin_user = get_user_by( 'id', self::$user_ids['admin'] ); + $admin_user->add_cap( 'activitypub' ); + } + + /** + * Clean up after tests. + */ + public static function wpTearDownAfterClass() { + foreach ( self::$user_ids as $user_id ) { + wp_delete_user( $user_id ); + } + } + + /** + * Clean up after each test. + */ + public function tear_down() { + // Remove filters that may have been added during tests. + remove_filter( 'nodeinfo_data', array( Nodeinfo::class, 'add_nodeinfo_data' ), 10 ); + remove_filter( 'nodeinfo2_data', array( Nodeinfo::class, 'add_nodeinfo2_data' ) ); + remove_filter( 'wellknown_nodeinfo_data', array( Nodeinfo::class, 'add_wellknown_nodeinfo_data' ) ); + + parent::tear_down(); + } + + /** + * Test init method registers hooks correctly. + * + * @covers ::init + */ + public function test_init_registers_hooks() { + // Initialize NodeInfo integration. + Nodeinfo::init(); + + // Check that hooks are registered. + $this->assertTrue( has_filter( 'nodeinfo_data' ) ); + $this->assertTrue( has_filter( 'nodeinfo2_data' ) ); + $this->assertTrue( has_filter( 'wellknown_nodeinfo_data' ) ); + } + + /** + * Data provider for NodeInfo version testing. + * + * @return array Test cases with different NodeInfo versions. + */ + public function nodeinfo_version_data() { + return array( + 'version 2.0' => array( + 'version' => '2.0', + 'expected_protocols' => array( 'activitypub' ), + ), + 'version 2.1' => array( + 'version' => '2.1', + 'expected_protocols' => array( 'activitypub' ), + ), + ); + } + + /** + * Test add_nodeinfo_data method with different versions. + * + * @dataProvider nodeinfo_version_data + * @covers ::add_nodeinfo_data + * + * @param string $version The NodeInfo version. + * @param array $expected_protocols The expected protocol structure. + */ + public function test_add_nodeinfo_data_with_versions( $version, $expected_protocols ) { + $original_nodeinfo = array( + 'version' => $version, + 'software' => array( + 'name' => 'wordpress', + 'version' => get_bloginfo( 'version' ), + ), + 'protocols' => array(), + 'usage' => array(), + 'metadata' => array(), + ); + + $result = Nodeinfo::add_nodeinfo_data( $original_nodeinfo, $version ); + + // Check protocols are added correctly based on version. + $this->assertEquals( $expected_protocols, $result['protocols'] ); + + // Check usage data is added. + $this->assertArrayHasKey( 'users', $result['usage'] ); + $this->assertArrayHasKey( 'total', $result['usage']['users'] ); + $this->assertArrayHasKey( 'activeMonth', $result['usage']['users'] ); + $this->assertArrayHasKey( 'activeHalfyear', $result['usage']['users'] ); + + // Check metadata is added. + $this->assertArrayHasKey( 'federation', $result['metadata'] ); + $this->assertArrayHasKey( 'staffAccounts', $result['metadata'] ); + $this->assertTrue( $result['metadata']['federation']['enabled'] ); + } + + /** + * Test add_nodeinfo_data preserves existing data. + * + * @covers ::add_nodeinfo_data + */ + public function test_add_nodeinfo_data_preserves_existing_data() { + $original_nodeinfo = array( + 'version' => '2.0', + 'software' => array( + 'name' => 'wordpress', + 'version' => get_bloginfo( 'version' ), + ), + 'protocols' => array( 'existing-protocol' ), + 'usage' => array( + 'localPosts' => 10, + ), + 'metadata' => array( + 'existing' => 'data', + ), + ); + + $result = Nodeinfo::add_nodeinfo_data( $original_nodeinfo, '2.0' ); + + // Check that existing data is preserved. + $this->assertEquals( get_bloginfo( 'version' ), $result['software']['version'] ); + $this->assertEquals( 10, $result['usage']['localPosts'] ); + $this->assertEquals( 'data', $result['metadata']['existing'] ); + + // Check that new data is added. + $this->assertContains( 'existing-protocol', $result['protocols'] ); + $this->assertContains( 'activitypub', $result['protocols'] ); + } + + /** + * Test add_nodeinfo2_data method. + * + * @covers ::add_nodeinfo2_data + */ + public function test_add_nodeinfo2_data() { + $original_nodeinfo = array( + 'version' => '1.0', + 'server' => array( + 'baseUrl' => home_url(), + 'name' => get_bloginfo( 'name' ), + ), + 'protocols' => array(), + 'usage' => array(), + ); + + $result = Nodeinfo::add_nodeinfo2_data( $original_nodeinfo ); + + // Check that activitypub protocol is added. + $this->assertContains( 'activitypub', $result['protocols'] ); + + // Check usage data is added. + $this->assertArrayHasKey( 'users', $result['usage'] ); + $this->assertArrayHasKey( 'total', $result['usage']['users'] ); + $this->assertArrayHasKey( 'activeMonth', $result['usage']['users'] ); + $this->assertArrayHasKey( 'activeHalfyear', $result['usage']['users'] ); + + // Check that original data is preserved. + $this->assertEquals( home_url(), $result['server']['baseUrl'] ); + $this->assertEquals( get_bloginfo( 'name' ), $result['server']['name'] ); + } + + /** + * Test add_nodeinfo2_data preserves existing protocols. + * + * @covers ::add_nodeinfo2_data + */ + public function test_add_nodeinfo2_data_preserves_existing_protocols() { + $original_nodeinfo = array( + 'protocols' => array( 'existing-protocol' ), + 'usage' => array(), + ); + + $result = Nodeinfo::add_nodeinfo2_data( $original_nodeinfo ); + + // Check that both existing and new protocols are present. + $this->assertContains( 'existing-protocol', $result['protocols'] ); + $this->assertContains( 'activitypub', $result['protocols'] ); + } + + /** + * Test add_wellknown_nodeinfo_data method. + * + * @covers ::add_wellknown_nodeinfo_data + */ + public function test_add_wellknown_nodeinfo_data() { + $original_data = array( + 'links' => array( + array( + 'rel' => 'http://nodeinfo.diaspora.software/ns/schema/2.0', + 'href' => home_url( '/.well-known/nodeinfo/2.0' ), + ), + ), + ); + + $result = Nodeinfo::add_wellknown_nodeinfo_data( $original_data ); + + // Check that original links are preserved. + $this->assertCount( 2, $result['links'] ); + $this->assertEquals( 'http://nodeinfo.diaspora.software/ns/schema/2.0', $result['links'][0]['rel'] ); + + // Check that ActivityStreams Application link is added. + $activitystreams_link = null; + foreach ( $result['links'] as $link ) { + if ( 'https://www.w3.org/ns/activitystreams#Application' === $link['rel'] ) { + $activitystreams_link = $link; + break; + } + } + + $this->assertNotNull( $activitystreams_link, 'ActivityStreams Application link should be added' ); + $this->assertTrue( false !== strpos( $activitystreams_link['href'], '/application' ), 'Link should contain /application' ); + } + + /** + * Test add_wellknown_nodeinfo_data handles empty data. + * + * @covers ::add_wellknown_nodeinfo_data + */ + public function test_add_wellknown_nodeinfo_data_handles_empty_data() { + $original_data = array(); + + $result = Nodeinfo::add_wellknown_nodeinfo_data( $original_data ); + + // Check that links array is created. + $this->assertArrayHasKey( 'links', $result ); + $this->assertCount( 1, $result['links'] ); + + // Check that ActivityStreams Application link is added. + $this->assertEquals( 'https://www.w3.org/ns/activitystreams#Application', $result['links'][0]['rel'] ); + $this->assertTrue( false !== strpos( $result['links'][0]['href'], '/application' ), 'Link should contain /application' ); + } + + /** + * Test user statistics in NodeInfo data. + * + * @covers ::add_nodeinfo_data + */ + public function test_nodeinfo_user_statistics() { + $original_nodeinfo = array( + 'protocols' => array(), + 'usage' => array(), + 'metadata' => array(), + ); + + $result = Nodeinfo::add_nodeinfo_data( $original_nodeinfo, '2.0' ); + + // Check that user statistics are numeric. + $this->assertIsNumeric( $result['usage']['users']['total'] ); + $this->assertIsNumeric( $result['usage']['users']['activeMonth'] ); + $this->assertIsNumeric( $result['usage']['users']['activeHalfyear'] ); + + // Check that the values are reasonable (not negative). + $this->assertGreaterThanOrEqual( 0, $result['usage']['users']['total'] ); + $this->assertGreaterThanOrEqual( 0, $result['usage']['users']['activeMonth'] ); + $this->assertGreaterThanOrEqual( 0, $result['usage']['users']['activeHalfyear'] ); + } + + /** + * Test staff accounts in NodeInfo metadata. + * + * @covers ::add_nodeinfo_data + */ + public function test_nodeinfo_staff_accounts() { + $original_nodeinfo = array( + 'protocols' => array(), + 'usage' => array(), + 'metadata' => array(), + ); + + $result = Nodeinfo::add_nodeinfo_data( $original_nodeinfo, '2.0' ); + + // Check that staffAccounts is an array. + $this->assertIsArray( $result['metadata']['staffAccounts'] ); + + // Check that staff accounts contain the admin user we created. + $this->assertGreaterThanOrEqual( 1, count( $result['metadata']['staffAccounts'] ) ); + + // Check that staff account entries look like WebFinger resources. + foreach ( $result['metadata']['staffAccounts'] as $staff_account ) { + $this->assertIsString( $staff_account ); + // WebFinger resources typically contain @ symbol. + $this->assertTrue( false !== strpos( $staff_account, '@' ), 'Staff account should contain @ symbol' ); + } + } + + /** + * Test federation metadata. + * + * @covers ::add_nodeinfo_data + */ + public function test_nodeinfo_federation_metadata() { + $original_nodeinfo = array( + 'protocols' => array(), + 'usage' => array(), + 'metadata' => array(), + ); + + $result = Nodeinfo::add_nodeinfo_data( $original_nodeinfo, '2.0' ); + + // Check that federation is enabled. + $this->assertArrayHasKey( 'federation', $result['metadata'] ); + $this->assertArrayHasKey( 'enabled', $result['metadata']['federation'] ); + $this->assertTrue( $result['metadata']['federation']['enabled'] ); + } + + /** + * Test that the class methods are static. + * + * @covers ::init + * @covers ::add_nodeinfo_data + * @covers ::add_nodeinfo2_data + * @covers ::add_wellknown_nodeinfo_data + */ + public function test_methods_are_static() { + $reflection = new \ReflectionClass( Nodeinfo::class ); + + $methods = array( 'init', 'add_nodeinfo_data', 'add_nodeinfo2_data', 'add_wellknown_nodeinfo_data' ); + + foreach ( $methods as $method_name ) { + $method = $reflection->getMethod( $method_name ); + $this->assertTrue( $method->isStatic(), "Method {$method_name} should be static" ); + } + } + + /** + * Test integration with actual WordPress hooks. + * + * @covers ::init + * @covers ::add_nodeinfo_data + * @covers ::add_nodeinfo2_data + * @covers ::add_wellknown_nodeinfo_data + */ + public function test_integration_with_hooks() { + // Initialize the integration. + Nodeinfo::init(); + + // Test nodeinfo_data filter. + $nodeinfo_data = apply_filters( 'nodeinfo_data', array( 'protocols' => array() ), '2.0' ); + $this->assertContains( 'activitypub', $nodeinfo_data['protocols'] ); + + // Test nodeinfo2_data filter. + $nodeinfo2_data = apply_filters( 'nodeinfo2_data', array( 'protocols' => array() ) ); + $this->assertContains( 'activitypub', $nodeinfo2_data['protocols'] ); + + // Test wellknown_nodeinfo_data filter. + $wellknown_data = apply_filters( 'wellknown_nodeinfo_data', array() ); + $this->assertArrayHasKey( 'links', $wellknown_data ); + } +} From 6be0f217143f91d313e26b78d6adcad24b73c842 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Wed, 1 Oct 2025 17:59:06 +0200 Subject: [PATCH 30/52] Add detailed magic method docs to ActivityPub classes (#2254) --- includes/activity/class-activity.php | 15 ++++ includes/activity/class-actor.php | 46 +++++++++++ includes/activity/class-base-object.php | 79 +++++++++++++++++++ includes/activity/class-generic-object.php | 71 ++--------------- .../activity/extended-object/class-event.php | 38 ++++++++- .../activity/extended-object/class-place.php | 24 ++++-- includes/class-moderation.php | 2 + includes/collection/class-inbox.php | 2 +- includes/collection/class-outbox.php | 2 +- 9 files changed, 206 insertions(+), 73 deletions(-) diff --git a/includes/activity/class-activity.php b/includes/activity/class-activity.php index 7d3ad9fb3..12851cb79 100644 --- a/includes/activity/class-activity.php +++ b/includes/activity/class-activity.php @@ -18,6 +18,21 @@ * * @see https://www.w3.org/TR/activitystreams-core/#activities * @see https://www.w3.org/TR/activitystreams-core/#intransitiveactivities + * + * @method string|array get_actor() Gets one or more entities that performed or are expected to perform the activity. + * @method string|array|null get_instrument() Gets one or more objects used in the completion of an Activity. + * @method Base_Object|string|array|null get_object() Gets the direct object of the activity. + * @method string|string[]|null get_origin() Gets the origin property of the activity. + * @method array|null get_replies() Gets the collection of responses to this activity. + * @method string|null get_result() Gets the result property of the activity. + * @method string|string[]|null get_target() Gets the target property of the activity. + * + * @method Activity set_actor( string|array $actor ) Sets one or more entities that performed the activity. + * @method Activity set_instrument( string|array $instrument ) Sets one or more objects used in the completion of an Activity. + * @method Activity set_origin( string|array|null $origin ) Sets the origin property of the activity. + * @method Activity set_replies( array $replies ) Sets the collection of responses to this activity. + * @method Activity set_result( string|null $result ) Sets the result property of the activity. + * @method Activity set_target( string|array|null $target ) Sets the target property of the activity. */ class Activity extends Base_Object { const JSON_LD_CONTEXT = array( diff --git a/includes/activity/class-actor.php b/includes/activity/class-actor.php index 9818bcf9d..064ab4183 100644 --- a/includes/activity/class-actor.php +++ b/includes/activity/class-actor.php @@ -16,6 +16,52 @@ * Represents an individual actor. * * @see https://www.w3.org/TR/activitystreams-vocabulary/#actor-types + * + * @method string[]|null get_also_known_as() Gets the also known as property of the actor. + * @method array|null get_attribution_domains() Gets domains allowed to use fediverse:creator for this actor. + * @method bool|null get_discoverable() Gets whether the actor is discoverable. + * @method string[]|null get_endpoints() Gets the endpoint property of the actor. + * @method string|null get_featured() Gets the featured posts collection of the actor. + * @method string|null get_featured_tags() Gets the featured tags collection of the actor. + * @method string|null get_followers() Gets the followers collection of the actor. + * @method string|null get_following() Gets the following collection of the actor. + * @method array|null get_implements() Gets the list of implemented specifications. + * @method string|null get_inbox() Gets the inbox property of the actor. + * @method bool|null get_indexable() Gets whether the actor is indexable. + * @method bool|null get_invisible() Gets whether the actor is invisible. + * @method string|null get_liked() Gets the liked collection of the actor. + * @method bool|null get_manually_approves_followers() Gets whether the actor manually approves followers. + * @method string|null get_moderators() Gets the moderators endpoint URL. + * @method string|null get_moved_to() Gets the target of the actor move. + * @method string|null get_outbox() Gets the outbox property of the actor. + * @method bool|null get_posting_restricted_to_mods() Gets whether posting is restricted to moderators. + * @method string|null get_preferred_username() Gets the preferred username of the actor. + * @method string|array|null get_public_key() Gets the public key of the actor. + * @method array get_streams() Gets the list of supplementary collections. + * @method string|null get_webfinger() Gets the WebFinger resource. + * + * @method Actor set_also_known_as( array $also_known_as ) Sets the also known as property of the actor. + * @method Actor set_attribution_domains( array $attribution_domains ) Sets domains allowed to use fediverse:creator for this actor. + * @method Actor set_discoverable( bool $discoverable ) Sets whether the actor is discoverable. + * @method Actor set_endpoints( string|array $endpoints ) Sets the endpoint property of the actor. + * @method Actor set_featured( string $featured ) Sets the featured posts collection of the actor. + * @method Actor set_featured_tags( string $featured_tags ) Sets the featured tags collection of the actor. + * @method Actor set_followers( string $followers ) Sets the followers collection of the actor. + * @method Actor set_following( string $following ) Sets the following collection of the actor. + * @method Actor set_implements( array $implements ) Sets the list of implemented specifications. + * @method Actor set_inbox( string $inbox ) Sets the inbox property of the actor. + * @method Actor set_indexable( bool $indexable ) Sets whether the actor is indexable. + * @method Actor set_invisible( bool $invisible ) Sets whether the actor is invisible. + * @method Actor set_liked( string $liked ) Sets the liked collection of the actor. + * @method Actor set_manually_approves_followers( bool $manually_approves_followers ) Sets whether the actor manually approves followers. + * @method Actor set_moderators( string $moderators ) Sets the moderators endpoint URL. + * @method Actor set_moved_to( string $moved_to ) Sets the target of the actor move. + * @method Actor set_outbox( string $outbox ) Sets the outbox property of the actor. + * @method Actor set_posting_restricted_to_mods( bool $posting_restricted_to_mods ) Sets whether posting is restricted to moderators. + * @method Actor set_preferred_username( string $preferred_username ) Sets the preferred username of the actor. + * @method Actor set_public_key( string|array $public_key ) Sets the public key of the actor. + * @method Actor set_streams( array $streams ) Sets the list of supplementary collections. + * @method Actor set_webfinger( string $webfinger ) Sets the WebFinger resource. */ class Actor extends Base_Object { // Reduced context for actors. TODO: still unused. diff --git a/includes/activity/class-base-object.php b/includes/activity/class-base-object.php index 8f0dc5c73..a8bd2ae01 100644 --- a/includes/activity/class-base-object.php +++ b/includes/activity/class-base-object.php @@ -20,6 +20,85 @@ * 'Base_' for this reason. * * @see https://www.w3.org/TR/activitystreams-core/#object + * + * @method string|null get_attachment() Gets the attachment property of the object. + * @method string|null get_attributed_to() Gets the entity attributed as the original author. + * @method string|null get_audience() Gets the total population of entities for which the object can be considered relevant. + * @method string[]|string|null get_bcc() Gets the private secondary audience of the object. + * @method string[]|string|null get_bto() Gets the private primary audience of the object. + * @method string[]|string|null get_cc() Gets the secondary recipients of the object. + * @method string|null get_content() Gets the content property of the object. + * @method string[]|null get_content_map() Gets the content map property of the object. + * @method string|null get_context() Gets the context within which the object exists. + * @method array|null get_dcterms() Gets the Dublin Core terms property of the object. + * @method string|null get_duration() Gets the duration property of time-bound resources. + * @method string|null get_end_time() Gets the date and time describing the ending time of the object. + * @method string|null get_generator() Gets the entity that generated the object. + * @method string[]|null get_icon() Gets the icon property of the object. + * @method string|null get_id() Gets the object's unique global identifier. + * @method string[]|null get_image() Gets the image property of the object. + * @method string[]|string|null get_in_reply_to() Gets the objects this object is in reply to. + * @method array|null get_interaction_policy() Gets the interaction policy property of the object. + * @method array|null get_likes() Gets the collection of likes for this object. + * @method string|null get_location() Gets the physical or logical locations associated with the object. + * @method string|null get_media_type() Gets the MIME media type of the content property. + * @method string|null get_name() Gets the natural language name of the object. + * @method string[]|null get_name_map() Gets the name map property of the object. + * @method string|null get_preview() Gets the entity that provides a preview of this object. + * @method string|null get_published() Gets the date and time the object was published in ISO 8601 format. + * @method string|array|null get_replies() Gets the collection of responses to this object. + * @method bool|null get_sensitive() Gets the sensitive property of the object. + * @method array|null get_shares() Gets the collection of shares for this object. + * @method array|null get_source() Gets the source property indicating content markup derivation. + * @method string|null get_start_time() Gets the date and time describing the starting time of the object. + * @method string|null get_summary() Gets the natural language summary of the object. + * @method string[]|null get_summary_map() Gets the summary map property of the object. + * @method array[]|null get_tag() Gets the tag property of the object. + * @method string[]|string|null get_to() Gets the primary recipients of the object. + * @method string get_type() Gets the type of the object. + * @method string|null get_updated() Gets the date and time the object was updated in ISO 8601 format. + * @method string|null get_url() Gets the URL of the object. + * + * @method string|string[] add_cc( string|array $cc ) Adds one or more entities to the secondary audience of the object. + * @method string|string[] add_to( string|array $to ) Adds one or more entities to the primary audience of the object. + * + * @method Base_Object set_attachment( array $attachment ) Sets the attachment property of the object. + * @method Base_Object set_attributed_to( string $attributed_to ) Sets the entity attributed as the original author. + * @method Base_Object set_audience( string $audience ) Sets the total population of entities for which the object can be considered relevant. + * @method Base_Object set_bcc( array|string $bcc ) Sets the private secondary audience of the object. + * @method Base_Object set_bto( array|string $bto ) Sets the private primary audience of the object. + * @method Base_Object set_cc( array|string $cc ) Sets the secondary recipients of the object. + * @method Base_Object set_content( string $content ) Sets the content property of the object. + * @method Base_Object set_content_map( array $content_map ) Sets the content property of the object. + * @method Base_Object set_context( string $context ) Sets the context within which the object exists. + * @method Base_Object set_dcterms( array $dcterms ) Sets the Dublin Core terms property of the object. + * @method Base_Object set_duration( string $duration ) Sets the duration property of time-bound resources. + * @method Base_Object set_end_time( string $end_time ) Sets the date and time describing the ending time of the object. + * @method Base_Object set_generator( string $generator ) Sets the entity that generated the object. + * @method Base_Object set_icon( array $icon ) Sets the icon property of the object. + * @method Base_Object set_id( string $id ) Sets the object's unique global identifier. + * @method Base_Object set_image( array $image ) Sets the image property of the object. + * @method Base_Object set_in_reply_to( string|string[] $in_reply_to ) Sets the is in reply to property of the object. + * @method Base_Object set_interaction_policy( array|null $policy ) Sets the interaction policy property of the object. + * @method Base_Object set_likes( array $likes ) Sets the collection of likes for this object. + * @method Base_Object set_location( string $location ) Sets the physical or logical locations associated with the object. + * @method Base_Object set_media_type( string $media_type ) Sets the MIME media type of the content property. + * @method Base_Object set_name( string $name ) Sets the natural language name of the object. + * @method Base_Object set_name_map( array|null $name_map ) Sets the name map property of the object. + * @method Base_Object set_preview( string $preview ) Sets the entity that provides a preview of this object. + * @method Base_Object set_published( string|null $published ) Sets the date and time the object was published in ISO 8601 format. + * @method Base_Object set_replies( string|array $replies ) Sets the collection of responses to this object. + * @method Base_Object set_sensitive( bool|null $sensitive ) Sets the sensitive property of the object. + * @method Base_Object set_shares( array $shares ) Sets the collection of shares for this object. + * @method Base_Object set_source( array $source ) Sets the source property indicating content markup derivation. + * @method Base_Object set_start_time( string $start_time ) Sets the date and time describing the starting time of the object. + * @method Base_Object set_summary( string $summary ) Sets the natural language summary of the object. + * @method Base_Object set_summary_map( array|null $summary_map ) Sets the summary property of the object. + * @method Base_Object set_tag( array|null $tag ) Sets the tag property of the object. + * @method Base_Object set_to( string|string[] $to ) Sets the primary recipients of the object. + * @method Base_Object set_type( string $type ) Sets the type of the object. + * @method Base_Object set_updated( string $updated ) Sets the date and time the object was updated in ISO 8601 format. + * @method Base_Object set_url( string $url ) Sets the URL of the object. */ class Base_Object extends Generic_Object { /** diff --git a/includes/activity/class-generic-object.php b/includes/activity/class-generic-object.php index b38485d52..0da79d3bc 100644 --- a/includes/activity/class-generic-object.php +++ b/includes/activity/class-generic-object.php @@ -17,70 +17,11 @@ * It is used to create objects that might be unknown by the plugin but * conform to the ActivityStreams vocabulary. * - * @since 5.3.0 - * - * @method string|null get_actor() Gets one or more entities that performed or are expected to perform the activity. - * @method string[]|null get_also_known_as() Gets the also known as property of the object. - * @method string|null get_attributed_to() Gets the entity attributed as the original author. - * @method array[]|null get_attachment() Gets the attachment property of the object. - * @method string[]|null get_cc() Gets the secondary recipients of the object. - * @method string|null get_content() Gets the content property of the object. - * @method string[]|null get_content_map() Gets the content map property of the object. - * @method string[]|null get_endpoints() Gets the endpoint property of the object. - * @method string[]|null get_icon() Gets the icon property of the object. - * @method string|null get_id() Gets the object's unique global identifier. - * @method string[]|null get_image() Gets the image property of the object. - * @method string[]|string|null get_in_reply_to() Gets the objects this object is in reply to. - * @method string|null get_inbox() Gets the inbox property of the object. - * @method array|null get_interaction_policy() Gets the interaction policy property of the object. - * @method string|null get_name() Gets the natural language name of the object. - * @method string[]|null get_name_map() Gets the name map property of the object. - * @method Base_Object|string|array|null get_object() Gets the direct object of the activity. - * @method string|string[]|null get_origin() Gets the origin property of the object. - * @method string|null get_preferred_username() Gets the preferred username of the object. - * @method string|null get_published() Gets the date and time the object was published in ISO 8601 format. - * @method string|null get_result() Gets the result property of the object. - * @method bool|null get_sensitive() Gets the sensitive property of the object. - * @method string|null get_summary() Gets the natural language summary of the object. - * @method string[]|null get_summary_map() Gets the summary map property of the object. - * @method string|string[]|null get_target() Gets the target property of the object. - * @method array[]|null get_tag() Gets the tag property of the object. - * @method string[]|string|null get_to() Gets the primary recipients of the object. - * @method string get_type() Gets the type of the object. - * @method string|null get_updated() Gets the date and time the object was updated in ISO 8601 format. - * @method string|null get_url() Gets the URL of the object. + * Provides generic magic methods for getting, setting, and adding properties + * through __call(). Specific property documentation is in the classes where + * the properties are actually defined. * - * @method string|string[] add_cc( string|array $cc ) Adds one or more entities to the secondary audience of the object. - * @method string|string[] add_to( string|array $to ) Adds one or more entities to the primary audience of the object. - * - * @method Base_Object set_actor( string|array $actor ) Sets one or more entities that performed the activity. - * @method Base_Object set_attachment( array $attachment ) Sets the attachment property of the object. - * @method Base_Object set_attributed_to( string $attributed_to ) Sets the entity attributed as the original author. - * @method Base_Object set_cc( array|string $cc ) Sets the secondary recipients of the object. - * @method Base_Object set_content( string $content ) Sets the content property of the object. - * @method Base_Object set_content_map( array $content_map ) Sets the content property of the object. - * @method Base_Object set_dcterms( array $dcterms ) Sets the Dublin Core terms property of the object. - * @method Base_Object set_icon( array $icon ) Sets the icon property of the object. - * @method Base_Object set_id( string $id ) Sets the object's unique global identifier. - * @method Base_Object set_image( array $image ) Sets the image property of the object. - * @method Base_Object set_in_reply_to( string|string[] $in_reply_to ) Sets the is in reply to property of the object. - * @method Base_Object set_inbox( string $inbox ) Sets the inbox property of the object. - * @method Base_Object set_interaction_policy( array|null $policy ) Sets the interaction policy property of the object. - * @method Base_Object set_name( string $name ) Sets the natural language name of the object. - * @method Base_Object set_name_map( array|null $name_map ) Sets the name map property of the object. - * @method Base_Object set_object( string|array|Base_Object|null $data ) Sets the direct object of the activity. - * @method Base_Object set_origin( string|array|null $origin ) Sets the origin property of the object. - * @method Base_Object set_published( string|null $published ) Sets the date and time the object was published in ISO 8601 format. - * @method Base_Object set_result( string|null $result ) Sets the result property of the object. - * @method Base_Object set_sensitive( bool|null $sensitive ) Sets the sensitive property of the object. - * @method Base_Object set_summary( string $summary ) Sets the natural language summary of the object. - * @method Base_Object set_summary_map( array|null $summary_map ) Sets the summary property of the object. - * @method Base_Object set_target( string|array|null $target ) Sets the target property of the object. - * @method Base_Object set_tag( array|null $tag ) Sets the tag property of the object. - * @method Base_Object set_to( string|string[] $to ) Sets the primary recipients of the object. - * @method Base_Object set_type( string $type ) Sets the type of the object. - * @method Base_Object set_updated( string $updated ) Sets the date and time the object was updated in ISO 8601 format. - * @method Base_Object set_url( string $url ) Sets the URL of the object. + * @since 5.3.0 */ #[\AllowDynamicProperties] class Generic_Object { @@ -225,7 +166,7 @@ public function has( $key ) { * * @param string $json The JSON string. * - * @return Generic_Object|\WP_Error An Object built from the JSON string or WP_Error when it's not a JSON string. + * @return static|\WP_Error An Object built from the JSON string or WP_Error when it's not a JSON string. */ public static function init_from_json( $json ) { $array = \json_decode( $json, true ); @@ -242,7 +183,7 @@ public static function init_from_json( $json ) { * * @param array $data The object array. * - * @return Generic_Object|\WP_Error An Object built from the input array or WP_Error when it's not an array. + * @return static|\WP_Error An Object built from the input array or WP_Error when it's not an array. */ public static function init_from_array( $data ) { if ( ! is_array( $data ) ) { diff --git a/includes/activity/extended-object/class-event.php b/includes/activity/extended-object/class-event.php index 1fb80c1c0..65f5be4c4 100644 --- a/includes/activity/extended-object/class-event.php +++ b/includes/activity/extended-object/class-event.php @@ -10,11 +10,47 @@ use Activitypub\Activity\Base_Object; /** - * Event is an implementation of one of the Activity Streams Event object type. + * Event is an implementation of Activity Streams Event object type. * * This class contains extra keys as used by Mobilizon to ensure compatibility. * * @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-event + * + * @method string|null get_actor() Gets which actor created the event. + * @method float|null get_altitude() Gets the altitude of the event location. + * @method bool|null get_anonymous_participation_enabled() Gets whether anonymous participation is enabled. + * @method string|null get_category() Gets the event's category. + * @method bool|null get_comments_enabled() Gets whether comments/replies are enabled. + * @method array|null get_contacts() Gets the event's contacts. + * @method string|null get_external_participation_url() Gets the external participation URL. + * @method string|null get_in_language() Gets the language of the event. + * @method bool|null get_is_online() Gets whether the event is online. + * @method string|null get_join_mode() Gets how new members may be able to join. + * @method int|null get_maximum_attendee_capacity() Gets how many places there can be for an event. + * @method string|null get_name() Gets the title of the event. + * @method int|null get_participant_count() Gets the participant count of the event. + * @method int|null get_remaining_attendee_capacity() Gets the number of attendee places that remain unallocated. + * @method string|null get_replies_moderation_option() Gets the moderation option for replies. + * @method string|null get_status() Gets the event's status. + * @method string|null get_timezone() Gets the timezone of the event. + * + * @method Event set_actor( string $actor ) Sets which actor created the event. + * @method Event set_altitude( float $altitude ) Sets the altitude of the event location. + * @method Event set_anonymous_participation_enabled( bool $enabled ) Sets whether anonymous participation is enabled. + * @method Event set_category( string $category, bool $mobilizon_compatibility ) Sets the event's category. + * @method Event set_comments_enabled( bool $comments_enabled ) Sets whether comments/replies are enabled. + * @method Event set_contacts( array $contacts ) Sets the event's contacts. + * @method Event set_external_participation_url( string $url ) Sets the external participation URL. + * @method Event set_in_language( string $language ) Sets the language of the event. + * @method Event set_is_online( bool $is_online ) Sets whether the event is online. + * @method Event set_join_mode( string $join_mode ) Sets how new members may be able to join. + * @method Event set_maximum_attendee_capacity( int $capacity ) Sets how many places there can be for an event. + * @method Event set_name( string $name ) Sets the title of the event. + * @method Event set_participant_count( int $count ) Sets the participant count of the event. + * @method Event set_remaining_attendee_capacity( int $capacity ) Sets the number of attendee places that remain unallocated. + * @method Event set_replies_moderation_option( string $type ) Sets the moderation option for replies. + * @method Event set_status( string $status ) Sets the event's status. + * @method Event set_timezone( string $timezone ) Sets the timezone of the event. */ class Event extends Base_Object { // Human friendly minimal context for full Mobilizon compatible ActivityPub events. diff --git a/includes/activity/extended-object/class-place.php b/includes/activity/extended-object/class-place.php index 1bf7419b6..16e682ca9 100644 --- a/includes/activity/extended-object/class-place.php +++ b/includes/activity/extended-object/class-place.php @@ -11,13 +11,27 @@ use Activitypub\Activity\Base_Object; /** - * Event is an implementation of one of the - * Activity Streams Event object type + * Place is an implementation of the Activity Streams Place object type. + * + * The Place object represents a logical or physical location. + * + * @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-place * - * The Object is the primary base type for the Activity Streams - * vocabulary. + * @method float|null get_accuracy() Gets the accuracy of position coordinates. + * @method array|string|null get_address() Gets the address of the place. + * @method float|null get_altitude() Gets the altitude of the place. + * @method float|null get_latitude() Gets the latitude of the place. + * @method float|null get_longitude() Gets the longitude of the place. + * @method float|null get_radius() Gets the radius from the given latitude and longitude. + * @method string|null get_units() Gets the measurement units for radius and altitude. * - * @see https://www.w3.org/TR/activitystreams-vocabulary/#dfn-event + * @method Place set_accuracy( float $accuracy ) Sets the accuracy of position coordinates. + * @method Place set_address( array|string $address ) Sets the address of the place. + * @method Place set_altitude( float $altitude ) Sets the altitude of the place. + * @method Place set_latitude( float $latitude ) Sets the latitude of the place. + * @method Place set_longitude( float $longitude ) Sets the longitude of the place. + * @method Place set_radius( float $radius ) Sets the radius from the given latitude and longitude. + * @method Place set_units( string $units ) Sets the measurement units for radius and altitude. */ class Place extends Base_Object { /** diff --git a/includes/class-moderation.php b/includes/class-moderation.php index c84a983a3..eaf14c82c 100644 --- a/includes/class-moderation.php +++ b/includes/class-moderation.php @@ -8,6 +8,7 @@ namespace Activitypub; use Activitypub\Activity\Activity; +use Activitypub\Activity\Actor; use Activitypub\Collection\Actors; use Activitypub\Collection\Blocked_Actors; @@ -362,6 +363,7 @@ private static function check_activity_against_blocks( $activity, $blocked_actor $content_map[] = $object->get_name(); if ( is_actor( $object ) ) { + /* @var Actor $object Actor object */ $content_map[] = $object->get_preferred_username(); } diff --git a/includes/collection/class-inbox.php b/includes/collection/class-inbox.php index 16d94e7d6..925acb715 100644 --- a/includes/collection/class-inbox.php +++ b/includes/collection/class-inbox.php @@ -84,7 +84,7 @@ public static function add( $activity, $user_id ) { /** * Get the title of an activity recursively. * - * @param Base_Object $activity_object The activity object. + * @param Activity|Base_Object $activity_object The activity object. * * @return string The title. */ diff --git a/includes/collection/class-outbox.php b/includes/collection/class-outbox.php index 4eb6cd311..9e3011891 100644 --- a/includes/collection/class-outbox.php +++ b/includes/collection/class-outbox.php @@ -365,7 +365,7 @@ private static function get_object_id( $data ) { /** * Get the title of an activity recursively. * - * @param Base_Object $activity_object The activity object. + * @param Activity|Base_Object $activity_object The activity object. * * @return string The title. */ From a28d39ba3817a3bd7781571c88871e25afc15f6a Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 1 Oct 2025 11:33:10 -0500 Subject: [PATCH 31/52] Fix flaky test_handle_create_check_multiple_comments test (#2262) --- tests/includes/handler/class-test-create.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/includes/handler/class-test-create.php b/tests/includes/handler/class-test-create.php index 817778821..0019c3ffc 100644 --- a/tests/includes/handler/class-test-create.php +++ b/tests/includes/handler/class-test-create.php @@ -271,6 +271,8 @@ public function test_handle_create_check_multiple_comments() { $args = array( 'type' => 'comment', 'post_id' => $this->post_id, + 'orderby' => 'comment_ID', + 'order' => 'ASC', ); $query = new \WP_Comment_Query( $args ); From 5afcc6060e9d31854ad764b002b1769a2f92dcf6 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 1 Oct 2025 13:19:08 -0500 Subject: [PATCH 32/52] Fix HTML entity encoding in extra field names (#2261) --- .github/changelog/2261-from-description | 4 +++ includes/collection/class-extra-fields.php | 19 +++++--------- .../collection/class-test-extra-fields.php | 25 +++++++++++++++++++ 3 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 .github/changelog/2261-from-description diff --git a/.github/changelog/2261-from-description b/.github/changelog/2261-from-description new file mode 100644 index 000000000..81c0a575b --- /dev/null +++ b/.github/changelog/2261-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed HTML entity encoding in extra field names when displayed on ActivityPub platforms diff --git a/includes/collection/class-extra-fields.php b/includes/collection/class-extra-fields.php index 7a60ea813..7671ad772 100644 --- a/includes/collection/class-extra-fields.php +++ b/includes/collection/class-extra-fields.php @@ -107,15 +107,12 @@ public static function fields_to_attachments( $fields ) { \add_filter( 'activitypub_link_rel', array( self::class, 'add_rel_me' ) ); foreach ( $fields as $post ) { + $title = \html_entity_decode( \get_the_title( $post ), \ENT_QUOTES, 'UTF-8' ); $content = self::get_formatted_content( $post ); $attachments[] = array( 'type' => 'PropertyValue', - 'name' => \get_the_title( $post ), - 'value' => \html_entity_decode( - $content, - \ENT_QUOTES, - 'UTF-8' - ), + 'name' => $title, + 'value' => \html_entity_decode( $content, \ENT_QUOTES, 'UTF-8' ), ); $attachment = false; @@ -134,7 +131,7 @@ public static function fields_to_attachments( $fields ) { if ( 'A' === $tags->get_tag() ) { $attachment = array( 'type' => 'Link', - 'name' => \get_the_title( $post ), + 'name' => $title, 'href' => \esc_url( $tags->get_attribute( 'href' ) ), ); @@ -149,12 +146,8 @@ public static function fields_to_attachments( $fields ) { if ( ! $attachment ) { $attachment = array( 'type' => 'Note', - 'name' => \get_the_title( $post ), - 'content' => \html_entity_decode( - $content, - \ENT_QUOTES, - 'UTF-8' - ), + 'name' => $title, + 'content' => \html_entity_decode( $content, \ENT_QUOTES, 'UTF-8' ), ); } diff --git a/tests/includes/collection/class-test-extra-fields.php b/tests/includes/collection/class-test-extra-fields.php index 04bb32423..0b78f646c 100644 --- a/tests/includes/collection/class-test-extra-fields.php +++ b/tests/includes/collection/class-test-extra-fields.php @@ -38,4 +38,29 @@ public function test_get_attachment() { $this->assertEquals( 1, $value_count['me'] ); } + + /** + * Test that HTML entities are decoded in field names and values. + * + * @covers ::fields_to_attachments + */ + public function test_html_entities_decoded() { + $post = self::factory()->post->create_and_get( + array( + 'post_type' => Extra_Fields::BLOG_POST_TYPE, + 'post_content' => 'Test content with "quotes" and & ampersands', + 'post_title' => 'Void’s Profile', + ) + ); + + $attachments = Extra_Fields::fields_to_attachments( array( $post ) ); + + // Check PropertyValue has decoded entities in both name and value. + $this->assertEquals( 'PropertyValue', $attachments[0]['type'] ); + // WordPress converts the HTML entity ’ to the UTF-8 right single quotation mark character. + $expected_name = "Void\u{2019}s Profile"; + $this->assertEquals( $expected_name, $attachments[0]['name'] ); + $this->assertStringContainsString( '"quotes"', $attachments[0]['value'] ); + $this->assertStringContainsString( '& ampersands', $attachments[0]['value'] ); + } } From b209cfa97701a526640a1b1c86f53f6d179ae02c Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Wed, 1 Oct 2025 13:21:10 -0500 Subject: [PATCH 33/52] Fix Jetpack reader feed URL path (#2263) Co-authored-by: Matthias Pfefferle --- integration/class-jetpack.php | 2 +- tests/integration/class-test-jetpack.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index e0f55256a..3457c00ae 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -101,7 +101,7 @@ public static function add_reader_link( $actions, $item ) { if ( empty( $feed['feed_id'] ) ) { return $actions; // No feed_id available on WPCOM. } - $url = sprintf( 'https://wordpress.com/reader/feed/%d', (int) $feed['feed_id'] ); + $url = sprintf( 'https://wordpress.com/reader/feeds/%d', (int) $feed['feed_id'] ); } else { $url = sprintf( 'https://wordpress.com/reader/feeds/lookup/%s', rawurlencode( $item['identifier'] ) ); } diff --git a/tests/integration/class-test-jetpack.php b/tests/integration/class-test-jetpack.php index 3551f5b8a..d0e269f70 100644 --- a/tests/integration/class-test-jetpack.php +++ b/tests/integration/class-test-jetpack.php @@ -292,7 +292,7 @@ public function reader_link_data() { 'identifier' => 'https://example.com/feed', ), 'feed_id' => 456, - 'expected_url' => 'https://wordpress.com/reader/feed/456', + 'expected_url' => 'https://wordpress.com/reader/feeds/456', 'should_have_reader_link' => true, ), 'active following without feed ID' => array( @@ -335,7 +335,7 @@ public function test_add_reader_link( $item, $feed_id, $expected_url, $should_ha $original_actions = array( 'edit' => 'Edit' ); // Set up WPCOM environment if expecting WPCOM-style URL. - $is_wpcom_test = $expected_url && strpos( $expected_url, '/reader/feed/' ) !== false; + $is_wpcom_test = $expected_url && strpos( $expected_url, '/reader/feeds/lookup/' ) === false; if ( $is_wpcom_test && ! defined( 'IS_WPCOM' ) ) { define( 'IS_WPCOM', true ); } From a90aaa45b0952a42514cf77f0faf959bb96125b4 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Wed, 1 Oct 2025 21:59:24 +0200 Subject: [PATCH 34/52] Add FEP-3b86 Activity Intents support to WebFinger (#2256) --- .github/changelog/2256-from-description | 4 + FEDERATION.md | 1 + .../rest/class-interaction-controller.php | 8 +- integration/class-webfinger.php | 50 ++- .../rest/class-test-webfinger-controller.php | 2 +- tests/integration/class-test-webfinger.php | 362 ++++++++++++++++++ 6 files changed, 416 insertions(+), 11 deletions(-) create mode 100644 .github/changelog/2256-from-description create mode 100644 tests/integration/class-test-webfinger.php diff --git a/.github/changelog/2256-from-description b/.github/changelog/2256-from-description new file mode 100644 index 000000000..bbc9dd3e2 --- /dev/null +++ b/.github/changelog/2256-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Added support for FEP-3b86 Activity Intents, extending WebFinger and REST interactions with new Create and Follow intent links. diff --git a/FEDERATION.md b/FEDERATION.md index 7a72ea4b0..adcbcb4c3 100644 --- a/FEDERATION.md +++ b/FEDERATION.md @@ -23,6 +23,7 @@ The WordPress plugin largely follows ActivityPub's server-to-server specificatio - [FEP-7888: Demystifying the context property](https://codeberg.org/fediverse/fep/src/branch/main/fep/7888/fep-7888.md) - [FEP-844e: Capability discovery](https://codeberg.org/fediverse/fep/src/branch/main/fep/844e/fep-844e.md) - [FEP-044f: Consent-respecting quote posts](https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md) +- [FEP-3b86: Activity Intents](https://codeberg.org/fediverse/fep/src/branch/main/fep/3b86/fep-3b86.md) Partially supported FEPs diff --git a/includes/rest/class-interaction-controller.php b/includes/rest/class-interaction-controller.php index 543cfac5f..b07f95d2c 100644 --- a/includes/rest/class-interaction-controller.php +++ b/includes/rest/class-interaction-controller.php @@ -7,6 +7,7 @@ namespace Activitypub\Rest; +use Activitypub\Activity\Activity; use Activitypub\Collection\Actors; use Activitypub\Http; @@ -43,12 +44,17 @@ public function register_routes() { 'callback' => array( $this, 'get_item' ), 'permission_callback' => '__return_true', 'args' => array( - 'uri' => array( + 'uri' => array( 'description' => 'The URI or webfinger ID of the object to interact with.', 'type' => 'string', 'required' => true, 'sanitize_callback' => array( $this, 'sanitize_uri' ), ), + 'intent' => array( + 'description' => 'The intent of the interaction, e.g., follow, reply, import.', + 'type' => 'string', + 'enum' => array_map( 'Activitypub\camel_to_snake_case', Activity::TYPES ), + ), ), ), ) diff --git a/integration/class-webfinger.php b/integration/class-webfinger.php index 6b6ed5375..3eed7b9dd 100644 --- a/integration/class-webfinger.php +++ b/integration/class-webfinger.php @@ -23,6 +23,9 @@ class Webfinger { public static function init() { \add_filter( 'webfinger_user_data', array( self::class, 'add_user_discovery' ), 1, 3 ); \add_filter( 'webfinger_data', array( self::class, 'add_pseudo_user_discovery' ), 1, 2 ); + + \add_filter( 'webfinger_user_data', array( self::class, 'add_interaction_links' ), 11 ); + \add_filter( 'webfinger_data', array( self::class, 'add_interaction_links' ), 11 ); } /** @@ -55,11 +58,6 @@ public static function add_user_discovery( $jrd, $uri, $user ) { 'href' => $user->get_id(), ); - $jrd['links'][] = array( - 'rel' => 'http://ostatus.org/schema/1.0/subscribe', - 'template' => get_rest_url_by_path( 'interactions?uri={uri}' ), - ); - return $jrd; } @@ -101,10 +99,6 @@ public static function add_pseudo_user_discovery( $jrd, $uri ) { 'type' => 'text/html', 'href' => $user->get_id(), ), - array( - 'rel' => 'http://ostatus.org/schema/1.0/subscribe', - 'template' => get_rest_url_by_path( 'interactions?uri={uri}' ), - ), ), ); @@ -116,4 +110,42 @@ public static function add_pseudo_user_discovery( $jrd, $uri ) { return $profile; } + + /** + * Add interaction links to the WebFinger data. + * + * @see https://codeberg.org/fediverse/fep/src/branch/main/fep/3b86/fep-3b86.md + * + * @param array $jrd The jrd array. + * + * @return array The jrd array. + */ + public static function add_interaction_links( $jrd ) { + if ( ! is_array( $jrd ) ) { + return $jrd; + } + + $jrd['links'][] = array( + 'rel' => 'http://ostatus.org/schema/1.0/subscribe', + 'template' => get_rest_url_by_path( 'interactions?uri={uri}' ), + ); + + /* + * Note: The parameter name `{inReplyTo}` is used here for all 'Create' intents, + * not just replies, to maintain compatibility with existing implementations and + * the FEP-3b86 specification. If a more generic parameter name is adopted in the + * future, this should be updated accordingly. + */ + $jrd['links'][] = array( + 'rel' => 'https://w3id.org/fep/3b86/Create', + 'template' => get_rest_url_by_path( 'interactions?uri={inReplyTo}&intent=create' ), + ); + + $jrd['links'][] = array( + 'rel' => 'https://w3id.org/fep/3b86/Follow', + 'template' => get_rest_url_by_path( 'interactions?uri={object}&intent=follow' ), + ); + + return $jrd; + } } diff --git a/tests/includes/rest/class-test-webfinger-controller.php b/tests/includes/rest/class-test-webfinger-controller.php index 6772d7a46..e6025bed1 100644 --- a/tests/includes/rest/class-test-webfinger-controller.php +++ b/tests/includes/rest/class-test-webfinger-controller.php @@ -146,7 +146,7 @@ function ( $data, $webfinger ) use ( $test_data ) { $this->assertEquals( 'acct:test_user@' . WP_TESTS_DOMAIN, $webfinger ); return $test_data; }, - 10, + 20, 2 ); diff --git a/tests/integration/class-test-webfinger.php b/tests/integration/class-test-webfinger.php new file mode 100644 index 000000000..fe39bb937 --- /dev/null +++ b/tests/integration/class-test-webfinger.php @@ -0,0 +1,362 @@ +user->create( + array( + 'role' => 'author', + 'user_login' => 'testauthor', + 'display_name' => 'Test Author', + ) + ); + + self::$user_ids['admin'] = $factory->user->create( + array( + 'role' => 'administrator', + 'user_login' => 'testadmin', + 'display_name' => 'Test Admin', + ) + ); + + // Give users activitypub capability. + $author = get_user_by( 'id', self::$user_ids['author'] ); + $author->add_cap( 'activitypub' ); + + $admin = get_user_by( 'id', self::$user_ids['admin'] ); + $admin->add_cap( 'activitypub' ); + } + + /** + * Clean up after tests. + */ + public static function wpTearDownAfterClass() { + foreach ( self::$user_ids as $user_id ) { + wp_delete_user( $user_id ); + } + } + + /** + * Clean up after each test. + */ + public function tear_down() { + // Remove filters that may have been added during tests. + remove_filter( 'webfinger_user_data', array( Webfinger::class, 'add_user_discovery' ), 1 ); + remove_filter( 'webfinger_data', array( Webfinger::class, 'add_pseudo_user_discovery' ), 1 ); + remove_filter( 'webfinger_user_data', array( Webfinger::class, 'add_interaction_links' ), 1 ); + remove_filter( 'webfinger_data', array( Webfinger::class, 'add_interaction_links' ), 1 ); + + parent::tear_down(); + } + + /** + * Test init method registers hooks correctly. + * + * @covers ::init + */ + public function test_init_registers_hooks() { + // Initialize WebFinger integration. + Webfinger::init(); + + // Check that hooks are registered. + $this->assertNotFalse( has_filter( 'webfinger_user_data', array( Webfinger::class, 'add_user_discovery' ) ) ); + $this->assertNotFalse( has_filter( 'webfinger_data', array( Webfinger::class, 'add_pseudo_user_discovery' ) ) ); + $this->assertNotFalse( has_filter( 'webfinger_user_data', array( Webfinger::class, 'add_interaction_links' ) ) ); + $this->assertNotFalse( has_filter( 'webfinger_data', array( Webfinger::class, 'add_interaction_links' ) ) ); + } + + /** + * Test add_user_discovery method. + * + * @covers ::add_user_discovery + */ + public function test_add_user_discovery() { + $user = get_user_by( 'id', self::$user_ids['author'] ); + $actor = Actors::get_by_id( $user->ID ); + $uri = 'acct:' . $user->user_login . '@' . wp_parse_url( home_url(), PHP_URL_HOST ); + $initial_jrd = array( + 'subject' => $uri, + 'aliases' => array(), + 'links' => array(), + ); + + $result = Webfinger::add_user_discovery( $initial_jrd, $uri, $user ); + + // Check subject is set correctly. + $this->assertArrayHasKey( 'subject', $result ); + $this->assertStringContainsString( 'acct:', $result['subject'] ); + $this->assertStringContainsString( $user->user_login, $result['subject'] ); + + // Check aliases are added. + $this->assertArrayHasKey( 'aliases', $result ); + $this->assertIsArray( $result['aliases'] ); + $this->assertContains( $actor->get_id(), $result['aliases'] ); + $this->assertContains( $actor->get_url(), $result['aliases'] ); + + // Check that aliases are unique. + $this->assertCount( count( $result['aliases'] ), array_unique( $result['aliases'] ) ); + + // Check that ActivityPub self link is added. + $self_link = null; + foreach ( $result['links'] as $link ) { + if ( 'self' === $link['rel'] && 'application/activity+json' === $link['type'] ) { + $self_link = $link; + break; + } + } + $this->assertNotNull( $self_link, 'Should have ActivityPub self link' ); + $this->assertEquals( $actor->get_id(), $self_link['href'] ); + } + + /** + * Test add_user_discovery with invalid user. + * + * @covers ::add_user_discovery + */ + public function test_add_user_discovery_with_invalid_user() { + $user = get_user_by( 'id', 99999 ); // Non-existent user. + if ( ! $user ) { + $user = new \WP_User(); + } + + $initial_jrd = array( + 'subject' => 'acct:invalid@example.com', + 'aliases' => array(), + 'links' => array(), + ); + + $result = Webfinger::add_user_discovery( $initial_jrd, 'acct:invalid@example.com', $user ); + + // Should return original jrd unchanged. + $this->assertEquals( $initial_jrd, $result ); + } + + /** + * Test add_pseudo_user_discovery method. + * + * @covers ::add_pseudo_user_discovery + */ + public function test_add_pseudo_user_discovery() { + $user = get_user_by( 'id', self::$user_ids['author'] ); + $uri = 'acct:' . $user->user_login . '@' . wp_parse_url( home_url(), PHP_URL_HOST ); + + $initial_jrd = array( + 'subject' => $uri, + 'aliases' => array(), + 'links' => array(), + ); + + $result = Webfinger::add_pseudo_user_discovery( $initial_jrd, $uri ); + + // Check that result is an array (not WP_Error). + $this->assertIsArray( $result ); + + // Check subject is set. + $this->assertArrayHasKey( 'subject', $result ); + $this->assertStringContainsString( 'acct:', $result['subject'] ); + + // Check aliases are set. + $this->assertArrayHasKey( 'aliases', $result ); + $this->assertIsArray( $result['aliases'] ); + $this->assertGreaterThan( 0, count( $result['aliases'] ) ); + + // Check links are set. + $this->assertArrayHasKey( 'links', $result ); + $this->assertIsArray( $result['links'] ); + $this->assertGreaterThan( 0, count( $result['links'] ) ); + + // Check for ActivityPub self link. + $has_activitypub_link = false; + foreach ( $result['links'] as $link ) { + if ( 'self' === $link['rel'] && 'application/activity+json' === $link['type'] ) { + $has_activitypub_link = true; + break; + } + } + $this->assertTrue( $has_activitypub_link, 'Should have ActivityPub self link' ); + + // Check for profile page link. + $has_profile_link = false; + foreach ( $result['links'] as $link ) { + if ( 'http://webfinger.net/rel/profile-page' === $link['rel'] ) { + $has_profile_link = true; + break; + } + } + $this->assertTrue( $has_profile_link, 'Should have profile page link' ); + } + + /** + * Test add_pseudo_user_discovery with invalid resource. + * + * @covers ::add_pseudo_user_discovery + */ + public function test_add_pseudo_user_discovery_with_invalid_resource() { + $initial_jrd = array( + 'subject' => 'acct:invalid@invalid.example', + 'aliases' => array(), + 'links' => array(), + ); + + $result = Webfinger::add_pseudo_user_discovery( $initial_jrd, 'acct:invalid@invalid.example' ); + + // Should return WP_Error for invalid resource. + $this->assertInstanceOf( 'WP_Error', $result ); + } + + /** + * Test add_interaction_links method. + * + * @covers ::add_interaction_links + */ + public function test_add_interaction_links() { + $user = get_user_by( 'id', self::$user_ids['author'] ); + $uri = 'acct:' . $user->user_login . '@' . wp_parse_url( home_url(), PHP_URL_HOST ); + + $initial_jrd = array( + 'subject' => $uri, + 'aliases' => array(), + 'links' => array(), + ); + + $result = Webfinger::add_interaction_links( $initial_jrd ); + + // Check that links were added. + $this->assertArrayHasKey( 'links', $result ); + $this->assertIsArray( $result['links'] ); + + // Count interaction links added. + $interaction_link_count = 0; + $found_rels = array(); + + foreach ( $result['links'] as $link ) { + if ( isset( $link['template'] ) ) { + ++$interaction_link_count; + $found_rels[] = $link['rel']; + } + } + + // Should have added 3 interaction links. + $this->assertEquals( 3, $interaction_link_count ); + + // Check for OStatus subscribe link. + $this->assertContains( 'http://ostatus.org/schema/1.0/subscribe', $found_rels ); + + // Check for FEP-3b86 Create link. + $this->assertContains( 'https://w3id.org/fep/3b86/Create', $found_rels ); + + // Check for FEP-3b86 Follow link. + $this->assertContains( 'https://w3id.org/fep/3b86/Follow', $found_rels ); + } + + /** + * Test interaction links have correct templates. + * + * @covers ::add_interaction_links + */ + public function test_add_interaction_links_templates() { + $initial_jrd = array( 'links' => array() ); + $result = Webfinger::add_interaction_links( $initial_jrd ); + + // Check templates contain required placeholders. + foreach ( $result['links'] as $link ) { + if ( ! isset( $link['template'] ) ) { + continue; + } + + $this->assertIsString( $link['template'] ); + $this->assertStringContainsString( 'interactions', $link['template'] ); + + // Check that template has the right placeholder based on rel. + if ( 'http://ostatus.org/schema/1.0/subscribe' === $link['rel'] ) { + $this->assertStringContainsString( '{uri}', $link['template'] ); + } elseif ( 'https://w3id.org/fep/3b86/Create' === $link['rel'] ) { + $this->assertStringContainsString( '{inReplyTo}', $link['template'] ); + $this->assertStringContainsString( 'intent=create', $link['template'] ); + } elseif ( 'https://w3id.org/fep/3b86/Follow' === $link['rel'] ) { + $this->assertStringContainsString( '{object}', $link['template'] ); + $this->assertStringContainsString( 'intent=follow', $link['template'] ); + } + } + } + + /** + * Test that methods are static. + * + * @covers ::init + * @covers ::add_user_discovery + * @covers ::add_pseudo_user_discovery + * @covers ::add_interaction_links + */ + public function test_methods_are_static() { + $reflection = new \ReflectionClass( Webfinger::class ); + + $methods = array( 'init', 'add_user_discovery', 'add_pseudo_user_discovery', 'add_interaction_links' ); + + foreach ( $methods as $method_name ) { + $method = $reflection->getMethod( $method_name ); + $this->assertTrue( $method->isStatic(), "Method {$method_name} should be static" ); + } + } + + /** + * Test integration with actual WordPress hooks. + * + * @covers ::init + * @covers ::add_user_discovery + * @covers ::add_pseudo_user_discovery + * @covers ::add_interaction_links + */ + public function test_integration_with_hooks() { + // Initialize the integration. + Webfinger::init(); + + $user = get_user_by( 'id', self::$user_ids['author'] ); + $uri = 'acct:' . $user->user_login . '@' . wp_parse_url( home_url(), PHP_URL_HOST ); + + $initial_jrd = array( + 'subject' => $uri, + 'aliases' => array(), + 'links' => array(), + ); + + // Test webfinger_user_data filter. + $user_data = apply_filters( 'webfinger_user_data', $initial_jrd, $uri, $user ); + $this->assertArrayHasKey( 'subject', $user_data ); + $this->assertArrayHasKey( 'aliases', $user_data ); + $this->assertArrayHasKey( 'links', $user_data ); + + // Test webfinger_data filter. + $data = apply_filters( 'webfinger_data', $initial_jrd, $uri ); + if ( ! is_wp_error( $data ) ) { + $this->assertArrayHasKey( 'links', $data ); + } + } +} From 54774496b61971fd5cea41dc8e367de16cdf80c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 04:22:55 +0000 Subject: [PATCH 35/52] Bump @wordpress/api-fetch from 7.31.0 to 7.32.0 (#2267) --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54f418d96..df669af05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "devDependencies": { "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.4.3", - "@wordpress/api-fetch": "^7.23.0", + "@wordpress/api-fetch": "^7.32.0", "@wordpress/block-editor": "^15.0.0", "@wordpress/blocks": "^15.3.0", "@wordpress/components": "^30.0.0", @@ -6695,15 +6695,15 @@ } }, "node_modules/@wordpress/api-fetch": { - "version": "7.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.31.0.tgz", - "integrity": "sha512-mEnNA2QvLeopNfXhRYaaCyF6Db1zZUaQI/+3UIJCn66OasoNQnvPHyHxWCRegsDfdtL7tCyvSuAbB++9wzcDyQ==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.32.0.tgz", + "integrity": "sha512-kTufX1lhb7AG7J3KMoDOKO9IKWVwWemf/TqaqiRYNC06uxXPl/VPBJC6AzInirsNw0BZknssje+g7Fc6WbrBFA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/i18n": "^6.4.0", - "@wordpress/url": "^4.31.0" + "@wordpress/i18n": "^6.5.0", + "@wordpress/url": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -7839,9 +7839,9 @@ } }, "node_modules/@wordpress/hooks": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.31.0.tgz", - "integrity": "sha512-8YOftWP54V4hvO46/FgXnpiB/fAC72CWD/F1JYtcfZcrWgbR96MGZxKXNvn5BgLx6juO36QQuFhJ5y2ZUEulkw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.32.0.tgz", + "integrity": "sha512-aXCLsuOQJiVJDrVKV4MjGYeU2Nv8+pg2KSAzANs7OGXIl714Q968t5qODJiJ6ADsng3FnQ0pATVYBGBTGlW6Gg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7867,15 +7867,15 @@ } }, "node_modules/@wordpress/i18n": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.4.0.tgz", - "integrity": "sha512-tLTjdLw8H778K4fmEo5NDLYJOAgvHxgfLU5N7lPuBy2TKi8tQl24xgmJOlDLiMzbmbSEwvUBZ/4xWJsGq9ITDQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.5.0.tgz", + "integrity": "sha512-VJ4QwkgKaVBk2+u6NYTMJ4jc/fave0Q2DAmoTN1AoSaHnK1Yuq9qJtBHAdkLUo7bBpRORBTl8OFFJTFLxgc9eA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", "@tannin/sprintf": "^1.3.2", - "@wordpress/hooks": "^4.31.0", + "@wordpress/hooks": "^4.32.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "tannin": "^1.2.0" @@ -8650,9 +8650,9 @@ } }, "node_modules/@wordpress/url": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.31.0.tgz", - "integrity": "sha512-fI0TK7WsGB3hgal/3PuoSN8zrato1hJz0r2xZQTe7+DWgrO3R8zlsoKhtOGzLL/zTNM5Auw22EPvRxGcwGT5zA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.32.0.tgz", + "integrity": "sha512-B7Q6sKzBqSLUdQiW8oL69LFuky/IRrXDbBhPpOJruwV4l6eH6UhTlnY4QZYi1Ke91c/VJZRjUKx1fNWPJx5d9w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { diff --git a/package.json b/package.json index a56fda6a7..8d92a3058 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "devDependencies": { "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.4.3", - "@wordpress/api-fetch": "^7.23.0", + "@wordpress/api-fetch": "^7.32.0", "@wordpress/block-editor": "^15.0.0", "@wordpress/blocks": "^15.3.0", "@wordpress/components": "^30.0.0", From 1fa46416a1b6fe77cf159bcc8bc68c4b913a9d79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 04:30:57 +0000 Subject: [PATCH 36/52] Bump @wordpress/compose from 7.31.0 to 7.32.0 (#2264) --- package-lock.json | 80 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index df669af05..b362f745d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@wordpress/block-editor": "^15.0.0", "@wordpress/blocks": "^15.3.0", "@wordpress/components": "^30.0.0", - "@wordpress/compose": "^7.22.0", + "@wordpress/compose": "^7.32.0", "@wordpress/core-data": "^7.22.0", "@wordpress/data": "^10.0.0", "@wordpress/dom-ready": "^4.0.0", @@ -7265,21 +7265,21 @@ } }, "node_modules/@wordpress/compose": { - "version": "7.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.31.0.tgz", - "integrity": "sha512-kxb1qHhiFwUDifBM9r4JZ3gYC1ZUvck5tgjmaWeg8EqIEnVn+Z7C+ntNA9ySLWrmDYc4Gki7YJZbfVHzrtcDLg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.32.0.tgz", + "integrity": "sha512-y4StIlClJiijBHduZ6Bx0tfFarsNi6hc+mvPk2ENIfNNLHf0P90f97XjbvUUr0U1J92x7silHliQfdF0ygbFQg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", "@types/mousetrap": "^1.6.8", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/is-shallow-equal": "^5.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/priority-queue": "^3.31.0", - "@wordpress/undo-manager": "^1.31.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/is-shallow-equal": "^5.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/priority-queue": "^3.32.0", + "@wordpress/undo-manager": "^1.32.0", "change-case": "^4.1.2", "clipboard": "^2.0.11", "mousetrap": "^1.6.5", @@ -7454,14 +7454,14 @@ "license": "BSD" }, "node_modules/@wordpress/deprecated": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.31.0.tgz", - "integrity": "sha512-bbDrL2lp7crFfvmJ1EYVxPDcheTIwimt3gVzqQWCDr0SSCQw4fii5NEKOrUnWhz51YCuPbfWXUBaFlbAMS2CXw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.32.0.tgz", + "integrity": "sha512-HfHXUWfe/lyXTvJLWjpMJ90+XzmC2l/9vcp05n2tD+nsxwF5nS0Hjf+38pQtFPBcw3d1bbzMTNahDjtNBLvKTQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/hooks": "^4.31.0" + "@wordpress/hooks": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -7469,14 +7469,14 @@ } }, "node_modules/@wordpress/dom": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.31.0.tgz", - "integrity": "sha512-5/RBy9OreQktnBE75cB3R6Lva5c6hUlXvPo1NFfAebLeXX+7swZBmLYZnyf7dZbARRdqSwkundHZoKLcHa+20A==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.32.0.tgz", + "integrity": "sha512-TphAq3bE34R5O0qW2q1SSBGdqfjTtHQSxzjKc0ufvTJf1nVZkJpCOqAP0Bue48AwfFYQSagdD3RgqYjcPPEMYg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/deprecated": "^4.31.0" + "@wordpress/deprecated": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -7632,16 +7632,16 @@ } }, "node_modules/@wordpress/element": { - "version": "6.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-6.31.0.tgz", - "integrity": "sha512-KOier6Y4b4Y5yEV1GYen81R9gCEOvJT6eVbsc93w2fFEKi2FK/oI7IKzGv9GeJMkoCWvTSX6C/ZYTWk6fCUfeA==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-6.32.0.tgz", + "integrity": "sha512-W/Bw6HXzRBJgYYUdoUBUvtjXNWh8dVK8aqFsqpnEJTAiXdU8Ii0wBQ+E49bI/08yGCwsaXrLbQLXqtAiV6leMw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.25", - "@wordpress/escape-html": "^3.31.0", + "@wordpress/escape-html": "^3.32.0", "change-case": "^4.1.2", "is-plain-object": "^5.0.0", "react": "^18.3.0", @@ -7681,9 +7681,9 @@ } }, "node_modules/@wordpress/escape-html": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.31.0.tgz", - "integrity": "sha512-9g9qd7Q16PWDeYEa2dU+84d1SvjP4LfS7n7AuXkwl5+F7KfL2nZTmDTHWutw9jVjdDAGmjm1VNIj4ydQk9vaLA==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.32.0.tgz", + "integrity": "sha512-pT5wZmg9ob/u8RuSXgfZv8Kfd8zpvtBcCdcFE/UHasjtxJSecxDHFb0uI4eXQrSiTrsthbDZDlK/GIAagmt75Q==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7966,9 +7966,9 @@ } }, "node_modules/@wordpress/is-shallow-equal": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.31.0.tgz", - "integrity": "sha512-jqGEw+5DLNf2kNbjaNxIKWQGYkqxygRYDYTdhZ+f+Btw/gMKILJq0sZGRD8YjJFGG0cOC2qxtJnr9oF36Iu96Q==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.32.0.tgz", + "integrity": "sha512-YabJ43zv30CU8kPhTrWQZhlatwO/fBo78/HvEU40CSGCRf+j9XKu9ZUidj3xDKgzLEkDCOKmj0vUY0+NyBbKzA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8037,14 +8037,14 @@ } }, "node_modules/@wordpress/keycodes": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.31.0.tgz", - "integrity": "sha512-TmweVWZKUu3DreU9SAX69h7wGNnsl5cnN5S3RTVK3aMNOGhJabC7j7rueCmBgqgOFvzNEXeIL+SuYtWpIyEVsA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.32.0.tgz", + "integrity": "sha512-XzSc3uT+viVCdycT2W6/wu+d8NZaS2y0sdHZbPXIJ6hEbyyG7ncG+XDFhXckFggqXuajxkPTEJDwOtrSTxLYqw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/i18n": "^6.4.0" + "@wordpress/i18n": "^6.5.0" }, "engines": { "node": ">=18.12.0", @@ -8241,9 +8241,9 @@ } }, "node_modules/@wordpress/priority-queue": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.31.0.tgz", - "integrity": "sha512-OuHq9iGB8wppHfoMHs4g07Cc2yh2DyyqySDn+bpyXPbDcuqxU9s9EgjY08ZVjJEYMuFz2sjC16HlOFqv3NBYAg==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.32.0.tgz", + "integrity": "sha512-LXlkiXxRSv35FBvjfAqn+rHH7KF4mw2wVl57SVzWglZAUdfvrcjrinRlEsqgMZxeAVeLPiutRV1qlkueZl7E8w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8607,14 +8607,14 @@ } }, "node_modules/@wordpress/undo-manager": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.31.0.tgz", - "integrity": "sha512-4jsvLaf+O/AMX/2m34BHS4Jz/Z+9vfxkNLP0mhuqftOWRC66XFseMqU19VszQypL7VxWKMahenYqZw4O22JNnQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.32.0.tgz", + "integrity": "sha512-pEnsf9zvk61ijX28wmJ7HM2Xb2Dbdg80feF0QVFAsngFiS34r9/K1JE+y56OdyYY20ZGPbmbHLpIHX0ghjhpoQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/is-shallow-equal": "^5.31.0" + "@wordpress/is-shallow-equal": "^5.32.0" }, "engines": { "node": ">=18.12.0", diff --git a/package.json b/package.json index 8d92a3058..76cbad694 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@wordpress/block-editor": "^15.0.0", "@wordpress/blocks": "^15.3.0", "@wordpress/components": "^30.0.0", - "@wordpress/compose": "^7.22.0", + "@wordpress/compose": "^7.32.0", "@wordpress/core-data": "^7.22.0", "@wordpress/data": "^10.0.0", "@wordpress/dom-ready": "^4.0.0", From d062f4633f938cfcbd69a7d0de69f0b9e32120d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 04:44:35 +0000 Subject: [PATCH 37/52] Bump @wordpress/block-editor from 15.4.0 to 15.5.0 (#2265) --- package-lock.json | 388 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 195 insertions(+), 195 deletions(-) diff --git a/package-lock.json b/package-lock.json index b362f745d..d709d9d3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.4.3", "@wordpress/api-fetch": "^7.32.0", - "@wordpress/block-editor": "^15.0.0", + "@wordpress/block-editor": "^15.5.0", "@wordpress/blocks": "^15.3.0", "@wordpress/components": "^30.0.0", "@wordpress/compose": "^7.32.0", @@ -6679,15 +6679,15 @@ } }, "node_modules/@wordpress/a11y": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.31.0.tgz", - "integrity": "sha512-LU2Ea+RRaqe1Q8u15Y1dBxXfGwPsOtqXLZR7Bfk7y9yMsJnKqymovR7yvoPYe/4dWXy0B9sK1jUJtPAMUFfOng==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.32.0.tgz", + "integrity": "sha512-FNoyQUO1wAf768MX2vMNNk1Il3bi/A7c1s9WKSaufwEZEViXjWeqqb9GO6stWkur4UP9MRcv8IpWoLXi1BePHA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/dom-ready": "^4.31.0", - "@wordpress/i18n": "^6.4.0" + "@wordpress/dom-ready": "^4.32.0", + "@wordpress/i18n": "^6.5.0" }, "engines": { "node": ">=18.12.0", @@ -6711,9 +6711,9 @@ } }, "node_modules/@wordpress/autop": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-4.31.0.tgz", - "integrity": "sha512-PzmFe0gePKxdld01Nk/9quklzEZCshyCncs2uVaAzCXQ8jvubQo7Z9QYXHjY8ukHXCG+RyaYuj+PJrimV6iX2A==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-4.32.0.tgz", + "integrity": "sha512-JD1JmCE2gEWBikF9zHCFb8j6Az6AdXeuZjg3Ewyk9vlAfU8bADRXEwVslFM0p8UD/TtK3Zzw7Rj1B0B4Lf8W6g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -6950,9 +6950,9 @@ } }, "node_modules/@wordpress/blob": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-4.31.0.tgz", - "integrity": "sha512-14QzAp4tTFowxMgNjz2refH6ziGTX4TBfpDyTs+/grNzOhRlOlUOSx7u2S7zZekWzp/A6nsGklGr3ACrpkrDXA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-4.32.0.tgz", + "integrity": "sha512-LcQMY5Rj0OczNnBU+w+kvJJ9htsOChpoq7uMdTMqz7Oj8QmC+laIkpkX9Ds72Vkck1uaPDpFofw6wcC5KY3h+A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -6964,9 +6964,9 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-15.4.0.tgz", - "integrity": "sha512-vBnxrrT4UJ+gum5Z8oS3s8ULqjKlXrkHOrwQEVjc+8+wTwp1qePzCttA08eVqAFsO9JzeseIhiJkUAEhezFwIQ==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-15.5.0.tgz", + "integrity": "sha512-wyqhR7kE7vknEfxdHw5LIJrk7jR3I4WtO31TLKaIIK7gEaUS1eTAH6RNNu8UxJGhXP7PL7ogOb7q2bhd6eEmGA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -6974,38 +6974,38 @@ "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", "@react-spring/web": "^9.4.5", - "@wordpress/a11y": "^4.31.0", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/block-serialization-default-parser": "^5.31.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/commands": "^1.31.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/date": "^5.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/escape-html": "^3.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/is-shallow-equal": "^5.31.0", - "@wordpress/keyboard-shortcuts": "^5.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/preferences": "^4.31.0", - "@wordpress/priority-queue": "^3.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/rich-text": "^7.31.0", - "@wordpress/style-engine": "^2.31.0", - "@wordpress/token-list": "^3.31.0", - "@wordpress/upload-media": "^0.16.0", - "@wordpress/url": "^4.31.0", - "@wordpress/warning": "^3.31.0", - "@wordpress/wordcount": "^4.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/block-serialization-default-parser": "^5.32.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/commands": "^1.32.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/date": "^5.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/escape-html": "^3.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/is-shallow-equal": "^5.32.0", + "@wordpress/keyboard-shortcuts": "^5.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/preferences": "^4.32.0", + "@wordpress/priority-queue": "^3.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/rich-text": "^7.32.0", + "@wordpress/style-engine": "^2.32.0", + "@wordpress/token-list": "^3.32.0", + "@wordpress/upload-media": "^0.17.0", + "@wordpress/url": "^4.32.0", + "@wordpress/warning": "^3.32.0", + "@wordpress/wordcount": "^4.32.0", "change-case": "^4.1.2", "clsx": "^2.1.1", "colord": "^2.7.0", @@ -7091,9 +7091,9 @@ } }, "node_modules/@wordpress/block-serialization-default-parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.31.0.tgz", - "integrity": "sha512-38pHFz1ugJtYuuSxK7AxFzkmuZbUpSrylNrhjmWv12e0z5aYDNs8jtiii4CPeWD3RPvXEuYpwsOHR/4hTyuFMQ==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.32.0.tgz", + "integrity": "sha512-Rim243Fc2snGskZiKuBgi25MJQ9u81ngdMo7w1VZ7r/uqd6KrRr8CC1sY8hwop7ritCeGMFTEDAiD6ARuycmNw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7105,28 +7105,28 @@ } }, "node_modules/@wordpress/blocks": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.4.0.tgz", - "integrity": "sha512-hY/oofLfM0zujjQ9vvL7M9hzrW9xTc+MqHvwtAa0jZwCUWVKRY+jGUKp7HpZNcYtF+szR4LXATqS+kqcUAlARg==", + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.5.0.tgz", + "integrity": "sha512-RxJGBtjgyjDd79H4TEbGfy6N6JU1KLMyWzgjzrmScoZghFOBeWI4qHvqud9pr01A3i9IGhQ72j0QvvgQdtWhhA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/autop": "^4.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/block-serialization-default-parser": "^5.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/is-shallow-equal": "^5.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/rich-text": "^7.31.0", - "@wordpress/shortcode": "^4.31.0", - "@wordpress/warning": "^3.31.0", + "@wordpress/autop": "^4.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/block-serialization-default-parser": "^5.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/is-shallow-equal": "^5.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/rich-text": "^7.32.0", + "@wordpress/shortcode": "^4.32.0", + "@wordpress/warning": "^3.32.0", "change-case": "^4.1.2", "colord": "^2.7.0", "fast-deep-equal": "^3.1.3", @@ -7159,20 +7159,20 @@ } }, "node_modules/@wordpress/commands": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.31.0.tgz", - "integrity": "sha512-PaBQVIHNGBn2sMxPj5ILJPAe4h79MvUcb5DzgiXA+H+0nNHLsQxg2u8Cfm2spct37dqOLMnQ6PVMRS+SwCLESQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.32.0.tgz", + "integrity": "sha512-csVqkLoGw73i4plSMVx1t5pXFdFk8D9vJQJRzJWtdWiy8aMM+/1Yx3YetTAY/YD62mYOGk4FtkkhF/3ijaQUqQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/components": "^30.4.0", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/keyboard-shortcuts": "^5.31.0", - "@wordpress/private-apis": "^1.31.0", + "@wordpress/components": "^30.5.0", + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/keyboard-shortcuts": "^5.32.0", + "@wordpress/private-apis": "^1.32.0", "clsx": "^2.1.1", "cmdk": "^1.0.0" }, @@ -7186,9 +7186,9 @@ } }, "node_modules/@wordpress/components": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-30.4.0.tgz", - "integrity": "sha512-PrZ8+VMCciVkWna//AH55Xg+TALw/E67358B5w/qiBohZ0CaoL1z4UcltkO+Gd5BJ1E14HbD8vC/6ao8dMXEJg==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-30.5.0.tgz", + "integrity": "sha512-LIu96PI14RpwABd5iDyTI8OxlDVEbDfX/6UUctTKsSqfJWTAynIL/K/JIHhxxI2wYbtut9yu8nugwFCPdconvA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7204,23 +7204,23 @@ "@types/gradient-parser": "1.1.0", "@types/highlight-words-core": "1.2.1", "@use-gesture/react": "^10.3.1", - "@wordpress/a11y": "^4.31.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/date": "^5.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/escape-html": "^3.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/is-shallow-equal": "^5.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/primitives": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/rich-text": "^7.31.0", - "@wordpress/warning": "^3.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/date": "^5.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/escape-html": "^3.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/is-shallow-equal": "^5.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/primitives": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/rich-text": "^7.32.0", + "@wordpress/warning": "^3.32.0", "change-case": "^4.1.2", "clsx": "^2.1.1", "colord": "^2.7.0", @@ -7333,20 +7333,20 @@ } }, "node_modules/@wordpress/data": { - "version": "10.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.31.0.tgz", - "integrity": "sha512-iuQxrmbW55q+xy7lnXH8D6qHFAoG0/YcnjZ6jvqpDekRhdgl4kAPE+crx/kJ5RkrIIo38a+cLgVskCaKo+9E3w==", + "version": "10.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.32.0.tgz", + "integrity": "sha512-7lReC2/qVxlQVYVlqIYfZ9Irbzo6W30iuiD67xaXqVxiD9BA8CePY2dTBpCsykBkczoT0ryerVp648SvY82R9Q==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/compose": "^7.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/is-shallow-equal": "^5.31.0", - "@wordpress/priority-queue": "^3.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/redux-routine": "^5.31.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/is-shallow-equal": "^5.32.0", + "@wordpress/priority-queue": "^3.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/redux-routine": "^5.32.0", "deepmerge": "^4.3.0", "equivalent-key-map": "^0.2.2", "is-plain-object": "^5.0.0", @@ -7413,14 +7413,14 @@ } }, "node_modules/@wordpress/date": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-5.31.0.tgz", - "integrity": "sha512-xqKytkb60N9i+ETqTI+Asgb1myZIgnUne8zsGaYQU+B7H1M3ELw4lmc+ptDXjXrpI1Yb6BGUad4EIHBGVk+mog==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-5.32.0.tgz", + "integrity": "sha512-hWmsDHzzmhbWAwWzBM042eItGor1up9tV0nEvjn1qdERoI/MS3+78d8vF40sMdWnXLNcPTCR+JHjD6kqJVmuXQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/deprecated": "^4.31.0", + "@wordpress/deprecated": "^4.32.0", "moment": "^2.29.4", "moment-timezone": "^0.5.40" }, @@ -7484,9 +7484,9 @@ } }, "node_modules/@wordpress/dom-ready": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.31.0.tgz", - "integrity": "sha512-aRM4l5wzkrqAU686s4fz1bb+/7/BOFp+sXB0kx1vkiXl3ocfmHAr3jwEYU+OH/sX6Is3Ntkfh0uZe3EJLsqHTQ==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.32.0.tgz", + "integrity": "sha512-Ru+gF3J37wiz33yqVoSmwPmc5afvGyujxyLvkGI0N4Y6EBMUmEJbC6QUbTOVld8RANQ0Bqu1btXMZfFYEY9PIQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7853,9 +7853,9 @@ } }, "node_modules/@wordpress/html-entities": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.31.0.tgz", - "integrity": "sha512-5dk9h16jSXDTSdk0HnyXEOgZd7VSsMtr3YCSUQvzIYOFkpW2q1eB10coXHiuz0Z5ArlTuNYSfBd2J02xnG+a8g==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.32.0.tgz", + "integrity": "sha512-IHHxBeMIQR7/+Fq27eWEzOuBi10guTRBNVZUrdk32ZyJL2ISpVYwMiHOwKBH6J/67ayBSon23gUEWBqUE6bC9g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7889,15 +7889,15 @@ } }, "node_modules/@wordpress/icons": { - "version": "10.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.31.0.tgz", - "integrity": "sha512-Bfwt3SyjqClG6mwY78zhlzVRRW/OIqej09NLOGO0CDtjfrgQqD5HAK8kk2CayQr4hWeKMoFxzPBevMxWumBMPA==", + "version": "10.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.32.0.tgz", + "integrity": "sha512-1WvJdT361X1LnetYBpBWUjAVXZzl+pBdIwHbYRAp8ej47EI/igPmNxmq81nFd40s8fer/9qtipielcqSI6H2rA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/element": "^6.31.0", - "@wordpress/primitives": "^4.31.0" + "@wordpress/element": "^6.32.0", + "@wordpress/primitives": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -8017,16 +8017,16 @@ } }, "node_modules/@wordpress/keyboard-shortcuts": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-5.31.0.tgz", - "integrity": "sha512-7rEarvwA93+tNC/HPTMK5kuXLBHSSOXgKJz3H2ZPCsYnk6Jf34QeMHOsCJvzA8MuMbx+TBihpEM8JkAkeko60w==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-5.32.0.tgz", + "integrity": "sha512-s33V1wNmlXTaUmVC8NOX06a7vU4UUuiwqaDeKZO6V3Y9U28b8NAr2tJeY8oFfctPX5aRWeOaYfAXqTMI4oU9KA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/keycodes": "^4.31.0" + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/keycodes": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -8071,15 +8071,15 @@ } }, "node_modules/@wordpress/notices": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-5.31.0.tgz", - "integrity": "sha512-dU8ARG3UP1PSmPMfQNrz1DpDIn5xuW6t1J+mVkyAbq2o1+Fs72Fsmi6hXPc0ut+P0pGTmsASzIeo7CzZUihmGw==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-5.32.0.tgz", + "integrity": "sha512-iyjAtp/UJUT46zKpBi/oX3iR8y1P7W/VqsvTitGUUeZIH9yBwaKgk5mroTABjgIgqUcC7p64i5cOGi9c23L5kA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/data": "^10.31.0" + "@wordpress/a11y": "^4.32.0", + "@wordpress/data": "^10.32.0" }, "engines": { "node": ">=18.12.0", @@ -8180,22 +8180,22 @@ } }, "node_modules/@wordpress/preferences": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.31.0.tgz", - "integrity": "sha512-Ex1bftTy7cY+f+pfl2vaWu82QYBlkwHmJaPGQyRC0GKHiHrVHpfx7VOfwDuRAZ7ARHDWj284Ms4WGpyK0P5Yhg==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.32.0.tgz", + "integrity": "sha512-K2umcScb2efx028aFR9mbjW+p88kWp7C3CmdHOL00Gl8p4Hcl8N3eGUlYxs5CEaS0cCcwzL1eG9axL1TiskwOw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/private-apis": "^1.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/private-apis": "^1.32.0", "clsx": "^2.1.1" }, "engines": { @@ -8222,14 +8222,14 @@ } }, "node_modules/@wordpress/primitives": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-4.31.0.tgz", - "integrity": "sha512-cY4EKYQRqHu9NZuoWchxc/KWiofwGskzxz0oCfgbdkRlfTag8yBjWMayz+fRNaenw0l5pzLyIg3rcNDN8xLezw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-4.32.0.tgz", + "integrity": "sha512-pf46CU5qQaGOULlAMNQTi+Jkwf1vwfrGYmkRtuTP68/Y8yOI19v5JZg/Vwq5nCHOs/L750mX1wMp4WvGWoPhFg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/element": "^6.31.0", + "@wordpress/element": "^6.32.0", "clsx": "^2.1.1" }, "engines": { @@ -8256,9 +8256,9 @@ } }, "node_modules/@wordpress/private-apis": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.31.0.tgz", - "integrity": "sha512-OS/OvnUFj2QKeAsPGwgzETLPQhN8Ek1AC3q7rpuu+kZhZxB5hOsHDF/759XxH0fGPL/n0/Xqo4ZlnVYwPwqMPg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.32.0.tgz", + "integrity": "sha512-xmc+U8tve6QmGKiYTwVutkPkqqJkvB2fvrimjMkw8TGpnzBcmSlCtwIoLwJOBesD6liDdRFtBPpf6PM0jIRcIA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8270,9 +8270,9 @@ } }, "node_modules/@wordpress/redux-routine": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-5.31.0.tgz", - "integrity": "sha512-J16NmvIxWMU4lJMWrAshLCac5qjIs1QZnSzQXNKBXxg78ZjB7sa5Q9Qb8/aYxFVIIzTvpvDQVyHhHPcUnB4KYA==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-5.32.0.tgz", + "integrity": "sha512-DE/UCpBF7PxznAOOlf2/Tq1aQKvqU07aaFhgGaCBd7sBn6QtBjA5SvtOvKcpr+09awdcS1AeLl2DdPGnRUZkog==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8319,21 +8319,21 @@ } }, "node_modules/@wordpress/rich-text": { - "version": "7.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.31.0.tgz", - "integrity": "sha512-s1CHb9vFYxa/fOPXSMn8GauOYb+gSVczHHx06Hj86JilGNAKmALADqzR+6D6ACKjahQypduYsF9P669PY7+PrQ==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.32.0.tgz", + "integrity": "sha512-CUiKYCkuoAqfyMPkw4HRcWcK8bKdOCfMiHUfZvAaapjWB6qGhSsL4MRlmQV8IGtbHj5tUVkBAzTm5V5tIV2/yQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/escape-html": "^3.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/keycodes": "^4.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/escape-html": "^3.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/keycodes": "^4.32.0", "colord": "2.9.3", "memize": "^2.1.0" }, @@ -8520,9 +8520,9 @@ } }, "node_modules/@wordpress/shortcode": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-4.31.0.tgz", - "integrity": "sha512-ITusd7CSFL41NMRgAygCmopj+Du0OyHM/5uH6IbBBYHsXwkUiV5B3wt3023td8GcdhzVQPHVHEHqC2gyrttxEg==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-4.32.0.tgz", + "integrity": "sha512-z8es//Y7eMk8hDjeIo1PJ4auXZ0JN87n/CC6GD3uW5wgOvpRqiLjT5QpxCBqfKzOisUnNkYbrEjeChpgOT1gMw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8535,9 +8535,9 @@ } }, "node_modules/@wordpress/style-engine": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-2.31.0.tgz", - "integrity": "sha512-kBGSLVZXWTTOJvEH6BrAWBkJJGBgFb7bq540pmi8RBTS8De3G6EZiufst+UDAlE6C2LC0E0264IzckUdKTE1oA==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-2.32.0.tgz", + "integrity": "sha512-qjXu4Dncch1UL4AUC3zJAOCj8mRy4+kAt+Rz3OoZV4vSsccUXKutxSCc12HGYS9IO+cjhj9yiWrSpGWCdMD/Sw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8593,9 +8593,9 @@ } }, "node_modules/@wordpress/token-list": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.31.0.tgz", - "integrity": "sha512-pkeXS3xyY6uT0e23cSbreTdTNBsLRxdhMzCXINeM98GfBki5+fwxDxQhwqox5hVRJvo+Gy25Kg1oNhqdGFyAjw==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.32.0.tgz", + "integrity": "sha512-FgA06HzE0dESSXAQIgzKfLa9Z2Qv1Gv4Blcskyko7wNTcQfPq53oByvCiA0aMFh/LmKHNIa2FR1vn3Y3ck/Ewg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -8622,22 +8622,22 @@ } }, "node_modules/@wordpress/upload-media": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@wordpress/upload-media/-/upload-media-0.16.0.tgz", - "integrity": "sha512-4ug8Ysm/cukAYQTt5MCTpY3yPaM0hB9HWf8SttUYVTfKacTCWbg2bRg5RihojDnB+zZVwmygTvVXmn3jFxSU+Q==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@wordpress/upload-media/-/upload-media-0.17.0.tgz", + "integrity": "sha512-AyU/AQOIwjgWiCcI6K36up87RNXSjvIac8oqEgd/U29Srk7aD51griD43tbRB1T3xy9TMoyASiBrAgT1w33lHQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/preferences": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/url": "^4.31.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/preferences": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/url": "^4.32.0", "uuid": "^9.0.1" }, "engines": { @@ -8685,9 +8685,9 @@ } }, "node_modules/@wordpress/warning": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.31.0.tgz", - "integrity": "sha512-Npw1Apa6r+K+jtX40ABWAXv7J1bVnOi6h9VPiMY8l/iZoRHBXao8HTgQnIoCm+GzymaQs6NQoH4X8UAClggeXA==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.32.0.tgz", + "integrity": "sha512-6dPNKfJAOXijIMi9k/QdS/IQvHXcl5ErNM10y5dIhhLDuGmsZlQER06VrVmQIVAkbsmL49OfrqkqMOQidp61JA==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -8726,9 +8726,9 @@ } }, "node_modules/@wordpress/wordcount": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.31.0.tgz", - "integrity": "sha512-2FUbfYxaTYq+LGLkPzGWq51tI4lTf6/gzflxSqbJpl6sSzbFwfuGhC/hAc4upaY4atHH5CD4k/dBS9eBHKo+7Q==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.32.0.tgz", + "integrity": "sha512-bVxNPejXkKo7s2HE2kkN5K1WqnkFp9yGRe40MNuq9/iLS0hXKqjMo3Ae0Gq2LQLbgVC/VSDXqB8B+vjFRZt3CQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { diff --git a/package.json b/package.json index 76cbad694..74246e105 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.4.3", "@wordpress/api-fetch": "^7.32.0", - "@wordpress/block-editor": "^15.0.0", + "@wordpress/block-editor": "^15.5.0", "@wordpress/blocks": "^15.3.0", "@wordpress/components": "^30.0.0", "@wordpress/compose": "^7.32.0", From 0e337d709f85e0b126402d76e9c0a1cd00a7bb33 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Thu, 2 Oct 2025 08:06:58 -0500 Subject: [PATCH 38/52] Add bidirectional transforms between reply and embed blocks (#2244) --- .github/changelog/2244-from-description | 4 ++ build/reply/index.asset.php | 2 +- build/reply/index.js | 2 +- src/reply/__tests__/transforms.test.js | 52 +++++++++++++++++++++++++ src/reply/index.js | 27 ++++++++++++- 5 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 .github/changelog/2244-from-description create mode 100644 src/reply/__tests__/transforms.test.js diff --git a/.github/changelog/2244-from-description b/.github/changelog/2244-from-description new file mode 100644 index 000000000..09b26557b --- /dev/null +++ b/.github/changelog/2244-from-description @@ -0,0 +1,4 @@ +Significance: minor +Type: added + +Add bidirectional transforms between reply and embed blocks for improved user experience. diff --git a/build/reply/index.asset.php b/build/reply/index.asset.php index d371c540d..3b8d0433a 100644 --- a/build/reply/index.asset.php +++ b/build/reply/index.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => 'b24c13a1511313a54eb6'); + array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => '54772633de8a75101c7a'); diff --git a/build/reply/index.js b/build/reply/index.js index 4c657e653..3e38b46a6 100644 --- a/build/reply/index.js +++ b/build/reply/index.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={20:(e,t,r)=>{var o=r(609),n=Symbol.for("react.element"),l=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,r){var o,c={},s=null,p=null;for(o in void 0!==r&&(s=""+r),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(p=t.ref),t)l.call(t,o)&&!i.hasOwnProperty(o)&&(c[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps)void 0===c[o]&&(c[o]=t[o]);return{$$typeof:n,type:e,key:s,ref:p,props:c,_owner:a.current}}},609:e=>{e.exports=window.React},687:(e,t,r)=>{const o=window.wp.blocks,n=window.wp.primitives;var l=r(848);const a=(0,l.jsx)(n.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,l.jsx)(n.Path,{d:"M6.68822 10.625L6.24878 11.0649L5.5 11.8145L5.5 5.5L12.5 5.5V8L14 6.5V5C14 4.44772 13.5523 4 13 4H5C4.44772 4 4 4.44771 4 5V13.5247C4 13.8173 4.16123 14.086 4.41935 14.2237C4.72711 14.3878 5.10601 14.3313 5.35252 14.0845L7.31 12.125H8.375L9.875 10.625H7.31H6.68822ZM14.5605 10.4983L11.6701 13.75H16.9975C17.9963 13.75 18.7796 14.1104 19.3553 14.7048C19.9095 15.2771 20.2299 16.0224 20.4224 16.7443C20.7645 18.0276 20.7543 19.4618 20.7487 20.2544C20.7481 20.345 20.7475 20.4272 20.7475 20.4999L19.2475 20.5001C19.2475 20.4191 19.248 20.3319 19.2484 20.2394V20.2394C19.2526 19.4274 19.259 18.2035 18.973 17.1307C18.8156 16.5401 18.586 16.0666 18.2778 15.7483C17.9909 15.4521 17.5991 15.25 16.9975 15.25H11.8106L14.5303 17.9697L13.4696 19.0303L8.96956 14.5303L13.4394 9.50171L14.5605 10.4983Z"})});var i=r(609);const c=window.wp.blockEditor,s=window.wp.components,p=window.wp.i18n,u=window.wp.element,d=window.wp.compose,f=window.wp.data,v=window.wp.apiFetch;var w=r.n(v);const b=window.wp.url,y={default:(0,p.__)("Enter the URL of a post from the Fediverse (Mastodon, Pixelfed, etc.) that you want to reply to.","activitypub"),checking:()=>(0,i.createElement)(i.Fragment,null,(0,i.createElement)(s.Spinner,null)," "+(0,p.__)("Checking URL...","activitypub")),valid:(0,p.__)("The author will be notified of your response.","activitypub"),error:(0,p.__)("This URL probably won’t receive your reply. We’ll still try.","activitypub")};(0,o.registerBlockType)("activitypub/reply",{edit:function({attributes:e,setAttributes:t,clientId:r,isSelected:n}){const{url:l="",embedPost:a=!1}=e,[v,m]=(0,u.useState)(y.default),[_,h]=(0,u.useState)(!1),[k,g]=(0,u.useState)(!1),C=(0,u.useRef)(),{insertAfterBlock:E,removeBlock:L,replaceInnerBlocks:O}=(0,f.useDispatch)("core/block-editor"),x=a&&!k&&_,P=(0,c.useInnerBlocksProps)({className:"activitypub-embed-container"},{allowedBlocks:["core/embed"],template:l&&x?[["core/embed",{url:l}]]:[],templateLock:"all"});(0,u.useEffect)((()=>{O(r,l&&x?[(0,o.createBlock)("core/embed",{url:l})]:[])}),[l,x,r,O]),(0,u.useEffect)((()=>{m(l?k?y.checking():_?y.valid:y.error:y.default)}),[l,k,_]);const B=()=>{setTimeout((()=>C.current?.focus()),50)},S=(0,u.useCallback)((async e=>{if(e)try{g(!0),new URL(e);try{const r=await w()({path:(0,b.addQueryArgs)("/oembed/1.0/proxy",{url:e,activitypub:!0})});r&&r.provider_name?(t({embedPost:!0}),h(!0)):h(!1)}catch(e){console.log("Could not fetch embed:",e),h(!1)}}catch(e){h(!1)}finally{g(!1)}else h(!1)}),[a,t]),R=(0,d.useDebounce)(S,250);return(0,u.useEffect)((()=>{l&&R(l)}),[l]),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(c.InspectorControls,null,(0,i.createElement)(s.PanelBody,{title:(0,p.__)("Settings","activitypub")},(0,i.createElement)(s.ToggleControl,{label:(0,p.__)("Embed Post","activitypub"),checked:!!a,onChange:e=>t({embedPost:e}),disabled:!_,help:(0,p.__)("Show embedded content from the URL.","activitypub"),__nextHasNoMarginBottom:!0}))),(0,i.createElement)("div",{onClick:B,...(0,c.useBlockProps)()},n&&(0,i.createElement)(s.TextControl,{label:(0,p.__)("Your post is a reply to the following URL","activitypub"),value:l,onChange:e=>t({url:e}),help:v,onKeyDown:e=>{"Enter"===e.key&&E(r),!l&&["Backspace","Delete"].includes(e.key)&&L(r)},ref:C,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),x&&(0,i.createElement)("div",{...P}),l&&!x&&!n&&(0,i.createElement)("div",{className:"activitypub-reply-block-editor__preview",contentEditable:!1,onClick:B,style:{cursor:"pointer"}},(0,i.createElement)("a",{href:l,className:"u-in-reply-to",target:"_blank",rel:"noreferrer"},"↬"+l.replace(/^https?:\/\//,"")))))},save:()=>null,icon:a})},848:(e,t,r)=>{e.exports=r(20)}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var l=r[e]={exports:{}};return t[e](l,l.exports,o),l.exports}o.m=t,e=[],o.O=(t,r,n,l)=>{if(!r){var a=1/0;for(p=0;p=l)&&Object.keys(o.O).every((e=>o.O[e](r[c])))?r.splice(c--,1):(i=!1,l0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[r,n,l]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={780:0,356:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var n,l,[a,i,c]=r,s=0;if(a.some((t=>0!==e[t]))){for(n in i)o.o(i,n)&&(o.m[n]=i[n]);if(c)var p=c(o)}for(t&&t(r);so(687)));n=o.O(n)})(); \ No newline at end of file +(()=>{"use strict";var e,t={20:(e,t,r)=>{var o=r(609),l=Symbol.for("react.element"),n=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,r){var o,i={},s=null,p=null;for(o in void 0!==r&&(s=""+r),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(p=t.ref),t)n.call(t,o)&&!c.hasOwnProperty(o)&&(i[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps)void 0===i[o]&&(i[o]=t[o]);return{$$typeof:l,type:e,key:s,ref:p,props:i,_owner:a.current}}},609:e=>{e.exports=window.React},687:(e,t,r)=>{const o=window.wp.blocks,l=window.wp.primitives;var n=r(848);const a=(0,n.jsx)(l.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,n.jsx)(l.Path,{d:"M6.68822 10.625L6.24878 11.0649L5.5 11.8145L5.5 5.5L12.5 5.5V8L14 6.5V5C14 4.44772 13.5523 4 13 4H5C4.44772 4 4 4.44771 4 5V13.5247C4 13.8173 4.16123 14.086 4.41935 14.2237C4.72711 14.3878 5.10601 14.3313 5.35252 14.0845L7.31 12.125H8.375L9.875 10.625H7.31H6.68822ZM14.5605 10.4983L11.6701 13.75H16.9975C17.9963 13.75 18.7796 14.1104 19.3553 14.7048C19.9095 15.2771 20.2299 16.0224 20.4224 16.7443C20.7645 18.0276 20.7543 19.4618 20.7487 20.2544C20.7481 20.345 20.7475 20.4272 20.7475 20.4999L19.2475 20.5001C19.2475 20.4191 19.248 20.3319 19.2484 20.2394V20.2394C19.2526 19.4274 19.259 18.2035 18.973 17.1307C18.8156 16.5401 18.586 16.0666 18.2778 15.7483C17.9909 15.4521 17.5991 15.25 16.9975 15.25H11.8106L14.5303 17.9697L13.4696 19.0303L8.96956 14.5303L13.4394 9.50171L14.5605 10.4983Z"})});var c=r(609);const i=window.wp.blockEditor,s=window.wp.components,p=window.wp.i18n,u=window.wp.element,d=window.wp.compose,b=window.wp.data,f=window.wp.apiFetch;var m=r.n(f);const v=window.wp.url,y={default:(0,p.__)("Enter the URL of a post from the Fediverse (Mastodon, Pixelfed, etc.) that you want to reply to.","activitypub"),checking:()=>(0,c.createElement)(c.Fragment,null,(0,c.createElement)(s.Spinner,null)," "+(0,p.__)("Checking URL...","activitypub")),valid:(0,p.__)("The author will be notified of your response.","activitypub"),error:(0,p.__)("This URL probably won’t receive your reply. We’ll still try.","activitypub")};(0,o.registerBlockType)("activitypub/reply",{edit:function({attributes:e,setAttributes:t,clientId:r,isSelected:l}){const{url:n="",embedPost:a=!1}=e,[f,w]=(0,u.useState)(y.default),[_,h]=(0,u.useState)(!1),[k,g]=(0,u.useState)(!1),C=(0,u.useRef)(),{insertAfterBlock:E,removeBlock:L,replaceInnerBlocks:O}=(0,b.useDispatch)("core/block-editor"),x=a&&!k&&_,B=(0,i.useInnerBlocksProps)({className:"activitypub-embed-container"},{allowedBlocks:["core/embed"],template:n&&x?[["core/embed",{url:n}]]:[],templateLock:"all"});(0,u.useEffect)((()=>{O(r,n&&x?[(0,o.createBlock)("core/embed",{url:n})]:[])}),[n,x,r,O]),(0,u.useEffect)((()=>{w(n?k?y.checking():_?y.valid:y.error:y.default)}),[n,k,_]);const P=()=>{setTimeout((()=>C.current?.focus()),50)},S=(0,u.useCallback)((async e=>{if(e)try{g(!0),new URL(e);try{const r=await m()({path:(0,v.addQueryArgs)("/oembed/1.0/proxy",{url:e,activitypub:!0})});r&&r.provider_name?(t({embedPost:!0}),h(!0)):h(!1)}catch(e){console.log("Could not fetch embed:",e),h(!1)}}catch(e){h(!1)}finally{g(!1)}else h(!1)}),[a,t]),R=(0,d.useDebounce)(S,250);return(0,u.useEffect)((()=>{n&&R(n)}),[n]),(0,c.createElement)(c.Fragment,null,(0,c.createElement)(i.InspectorControls,null,(0,c.createElement)(s.PanelBody,{title:(0,p.__)("Settings","activitypub")},(0,c.createElement)(s.ToggleControl,{label:(0,p.__)("Embed Post","activitypub"),checked:!!a,onChange:e=>t({embedPost:e}),disabled:!_,help:(0,p.__)("Show embedded content from the URL.","activitypub"),__nextHasNoMarginBottom:!0}))),(0,c.createElement)("div",{onClick:P,...(0,i.useBlockProps)()},l&&(0,c.createElement)(s.TextControl,{label:(0,p.__)("Your post is a reply to the following URL","activitypub"),value:n,onChange:e=>t({url:e}),help:f,onKeyDown:e=>{"Enter"===e.key&&E(r),!n&&["Backspace","Delete"].includes(e.key)&&L(r)},ref:C,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),x&&(0,c.createElement)("div",{...B}),n&&!x&&!l&&(0,c.createElement)("div",{className:"activitypub-reply-block-editor__preview",contentEditable:!1,onClick:P,style:{cursor:"pointer"}},(0,c.createElement)("a",{href:n,className:"u-in-reply-to",target:"_blank",rel:"noreferrer"},"↬"+n.replace(/^https?:\/\//,"")))))},save:()=>null,icon:a,transforms:{from:[{type:"block",blocks:["core/embed"],transform:e=>(0,o.createBlock)("activitypub/reply",{url:e.url||"",embedPost:!0})}],to:[{type:"block",blocks:["core/embed"],transform:e=>(0,o.createBlock)("core/embed",{url:e.url||""})}]}})},848:(e,t,r)=>{e.exports=r(20)}},r={};function o(e){var l=r[e];if(void 0!==l)return l.exports;var n=r[e]={exports:{}};return t[e](n,n.exports,o),n.exports}o.m=t,e=[],o.O=(t,r,l,n)=>{if(!r){var a=1/0;for(p=0;p=n)&&Object.keys(o.O).every((e=>o.O[e](r[i])))?r.splice(i--,1):(c=!1,n0&&e[p-1][2]>n;p--)e[p]=e[p-1];e[p]=[r,l,n]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={780:0,356:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var l,n,[a,c,i]=r,s=0;if(a.some((t=>0!==e[t]))){for(l in c)o.o(c,l)&&(o.m[l]=c[l]);if(i)var p=i(o)}for(t&&t(r);so(687)));l=o.O(l)})(); \ No newline at end of file diff --git a/src/reply/__tests__/transforms.test.js b/src/reply/__tests__/transforms.test.js new file mode 100644 index 000000000..8cb498a8c --- /dev/null +++ b/src/reply/__tests__/transforms.test.js @@ -0,0 +1,52 @@ +describe( 'Reply block transform logic', () => { + // Test just the transform logic without createBlock to avoid test environment issues + const getTransformAttributes = ( embedAttributes ) => { + return { + url: embedAttributes.url || '', + embedPost: true, + }; + }; + + it( 'should extract URL from embed block attributes', () => { + const embedAttributes = { + url: 'https://mastodon.social/@user/12345', + type: 'rich', + providerNameSlug: 'mastodon', + }; + + const replyAttributes = getTransformAttributes( embedAttributes ); + + expect( replyAttributes.url ).toBe( embedAttributes.url ); + expect( replyAttributes.embedPost ).toBe( true ); + } ); + + it( 'should handle empty URL from embed block', () => { + const embedAttributes = { + url: '', + }; + + const replyAttributes = getTransformAttributes( embedAttributes ); + + expect( replyAttributes.url ).toBe( '' ); + expect( replyAttributes.embedPost ).toBe( true ); + } ); + + it( 'should provide default URL when missing from embed block', () => { + const embedAttributes = {}; + + const replyAttributes = getTransformAttributes( embedAttributes ); + + expect( replyAttributes.url ).toBe( '' ); + expect( replyAttributes.embedPost ).toBe( true ); + } ); + + it( 'should always enable embedPost for transformed blocks', () => { + const embedAttributes = { + url: 'https://example.com/post', + }; + + const replyAttributes = getTransformAttributes( embedAttributes ); + + expect( replyAttributes.embedPost ).toBe( true ); + } ); +} ); diff --git a/src/reply/index.js b/src/reply/index.js index f1ff98d9b..49606910a 100644 --- a/src/reply/index.js +++ b/src/reply/index.js @@ -1,4 +1,4 @@ -import { registerBlockType } from '@wordpress/blocks'; +import { registerBlockType, createBlock } from '@wordpress/blocks'; import { commentReplyLink } from '@wordpress/icons'; import edit from './edit'; import './editor.scss'; @@ -8,4 +8,29 @@ registerBlockType( 'activitypub/reply', { edit, save, icon: commentReplyLink, + transforms: { + from: [ + { + type: 'block', + blocks: [ 'core/embed' ], + transform: ( attributes ) => { + return createBlock( 'activitypub/reply', { + url: attributes.url || '', + embedPost: true, + } ); + }, + }, + ], + to: [ + { + type: 'block', + blocks: [ 'core/embed' ], + transform: ( attributes ) => { + return createBlock( 'core/embed', { + url: attributes.url || '', + } ); + }, + }, + ], + }, } ); From 8266a435b2c51707ca39b7044a386bcd835e6358 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Thu, 2 Oct 2025 08:18:24 -0500 Subject: [PATCH 39/52] Validate ActivityPub URLs in reply block before setting inReplyTo (#2252) --- .github/changelog/2252-from-description | 4 ++++ build/reply/block.json | 4 ++++ build/reply/index.asset.php | 2 +- build/reply/index.js | 2 +- includes/transformer/class-post.php | 7 +++++-- src/reply/block.json | 4 ++++ src/reply/edit.js | 7 +++++-- 7 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 .github/changelog/2252-from-description diff --git a/.github/changelog/2252-from-description b/.github/changelog/2252-from-description new file mode 100644 index 000000000..2d2a38916 --- /dev/null +++ b/.github/changelog/2252-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Reply block now properly validates ActivityPub URLs before setting inReplyTo field diff --git a/build/reply/block.json b/build/reply/block.json index 79209881b..f1c627b70 100644 --- a/build/reply/block.json +++ b/build/reply/block.json @@ -29,6 +29,10 @@ "embedPost": { "type": "boolean", "default": null + }, + "isValidActivityPub": { + "type": "boolean", + "default": true } } } \ No newline at end of file diff --git a/build/reply/index.asset.php b/build/reply/index.asset.php index 3b8d0433a..f815a6254 100644 --- a/build/reply/index.asset.php +++ b/build/reply/index.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => '54772633de8a75101c7a'); + array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => '7232ea5e863a340bd748'); diff --git a/build/reply/index.js b/build/reply/index.js index 3e38b46a6..8aa1aa619 100644 --- a/build/reply/index.js +++ b/build/reply/index.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={20:(e,t,r)=>{var o=r(609),l=Symbol.for("react.element"),n=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),a=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,r){var o,i={},s=null,p=null;for(o in void 0!==r&&(s=""+r),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(p=t.ref),t)n.call(t,o)&&!c.hasOwnProperty(o)&&(i[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps)void 0===i[o]&&(i[o]=t[o]);return{$$typeof:l,type:e,key:s,ref:p,props:i,_owner:a.current}}},609:e=>{e.exports=window.React},687:(e,t,r)=>{const o=window.wp.blocks,l=window.wp.primitives;var n=r(848);const a=(0,n.jsx)(l.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,n.jsx)(l.Path,{d:"M6.68822 10.625L6.24878 11.0649L5.5 11.8145L5.5 5.5L12.5 5.5V8L14 6.5V5C14 4.44772 13.5523 4 13 4H5C4.44772 4 4 4.44771 4 5V13.5247C4 13.8173 4.16123 14.086 4.41935 14.2237C4.72711 14.3878 5.10601 14.3313 5.35252 14.0845L7.31 12.125H8.375L9.875 10.625H7.31H6.68822ZM14.5605 10.4983L11.6701 13.75H16.9975C17.9963 13.75 18.7796 14.1104 19.3553 14.7048C19.9095 15.2771 20.2299 16.0224 20.4224 16.7443C20.7645 18.0276 20.7543 19.4618 20.7487 20.2544C20.7481 20.345 20.7475 20.4272 20.7475 20.4999L19.2475 20.5001C19.2475 20.4191 19.248 20.3319 19.2484 20.2394V20.2394C19.2526 19.4274 19.259 18.2035 18.973 17.1307C18.8156 16.5401 18.586 16.0666 18.2778 15.7483C17.9909 15.4521 17.5991 15.25 16.9975 15.25H11.8106L14.5303 17.9697L13.4696 19.0303L8.96956 14.5303L13.4394 9.50171L14.5605 10.4983Z"})});var c=r(609);const i=window.wp.blockEditor,s=window.wp.components,p=window.wp.i18n,u=window.wp.element,d=window.wp.compose,b=window.wp.data,f=window.wp.apiFetch;var m=r.n(f);const v=window.wp.url,y={default:(0,p.__)("Enter the URL of a post from the Fediverse (Mastodon, Pixelfed, etc.) that you want to reply to.","activitypub"),checking:()=>(0,c.createElement)(c.Fragment,null,(0,c.createElement)(s.Spinner,null)," "+(0,p.__)("Checking URL...","activitypub")),valid:(0,p.__)("The author will be notified of your response.","activitypub"),error:(0,p.__)("This URL probably won’t receive your reply. We’ll still try.","activitypub")};(0,o.registerBlockType)("activitypub/reply",{edit:function({attributes:e,setAttributes:t,clientId:r,isSelected:l}){const{url:n="",embedPost:a=!1}=e,[f,w]=(0,u.useState)(y.default),[_,h]=(0,u.useState)(!1),[k,g]=(0,u.useState)(!1),C=(0,u.useRef)(),{insertAfterBlock:E,removeBlock:L,replaceInnerBlocks:O}=(0,b.useDispatch)("core/block-editor"),x=a&&!k&&_,B=(0,i.useInnerBlocksProps)({className:"activitypub-embed-container"},{allowedBlocks:["core/embed"],template:n&&x?[["core/embed",{url:n}]]:[],templateLock:"all"});(0,u.useEffect)((()=>{O(r,n&&x?[(0,o.createBlock)("core/embed",{url:n})]:[])}),[n,x,r,O]),(0,u.useEffect)((()=>{w(n?k?y.checking():_?y.valid:y.error:y.default)}),[n,k,_]);const P=()=>{setTimeout((()=>C.current?.focus()),50)},S=(0,u.useCallback)((async e=>{if(e)try{g(!0),new URL(e);try{const r=await m()({path:(0,v.addQueryArgs)("/oembed/1.0/proxy",{url:e,activitypub:!0})});r&&r.provider_name?(t({embedPost:!0}),h(!0)):h(!1)}catch(e){console.log("Could not fetch embed:",e),h(!1)}}catch(e){h(!1)}finally{g(!1)}else h(!1)}),[a,t]),R=(0,d.useDebounce)(S,250);return(0,u.useEffect)((()=>{n&&R(n)}),[n]),(0,c.createElement)(c.Fragment,null,(0,c.createElement)(i.InspectorControls,null,(0,c.createElement)(s.PanelBody,{title:(0,p.__)("Settings","activitypub")},(0,c.createElement)(s.ToggleControl,{label:(0,p.__)("Embed Post","activitypub"),checked:!!a,onChange:e=>t({embedPost:e}),disabled:!_,help:(0,p.__)("Show embedded content from the URL.","activitypub"),__nextHasNoMarginBottom:!0}))),(0,c.createElement)("div",{onClick:P,...(0,i.useBlockProps)()},l&&(0,c.createElement)(s.TextControl,{label:(0,p.__)("Your post is a reply to the following URL","activitypub"),value:n,onChange:e=>t({url:e}),help:f,onKeyDown:e=>{"Enter"===e.key&&E(r),!n&&["Backspace","Delete"].includes(e.key)&&L(r)},ref:C,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),x&&(0,c.createElement)("div",{...B}),n&&!x&&!l&&(0,c.createElement)("div",{className:"activitypub-reply-block-editor__preview",contentEditable:!1,onClick:P,style:{cursor:"pointer"}},(0,c.createElement)("a",{href:n,className:"u-in-reply-to",target:"_blank",rel:"noreferrer"},"↬"+n.replace(/^https?:\/\//,"")))))},save:()=>null,icon:a,transforms:{from:[{type:"block",blocks:["core/embed"],transform:e=>(0,o.createBlock)("activitypub/reply",{url:e.url||"",embedPost:!0})}],to:[{type:"block",blocks:["core/embed"],transform:e=>(0,o.createBlock)("core/embed",{url:e.url||""})}]}})},848:(e,t,r)=>{e.exports=r(20)}},r={};function o(e){var l=r[e];if(void 0!==l)return l.exports;var n=r[e]={exports:{}};return t[e](n,n.exports,o),n.exports}o.m=t,e=[],o.O=(t,r,l,n)=>{if(!r){var a=1/0;for(p=0;p=n)&&Object.keys(o.O).every((e=>o.O[e](r[i])))?r.splice(i--,1):(c=!1,n0&&e[p-1][2]>n;p--)e[p]=e[p-1];e[p]=[r,l,n]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={780:0,356:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var l,n,[a,c,i]=r,s=0;if(a.some((t=>0!==e[t]))){for(l in c)o.o(c,l)&&(o.m[l]=c[l]);if(i)var p=i(o)}for(t&&t(r);so(687)));l=o.O(l)})(); \ No newline at end of file +(()=>{"use strict";var e,t={561:(e,t,o)=>{const r=window.wp.blocks,i=window.wp.primitives,l=window.ReactJSXRuntime,n=(0,l.jsx)(i.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,l.jsx)(i.Path,{d:"M6.68822 10.625L6.24878 11.0649L5.5 11.8145L5.5 5.5L12.5 5.5V8L14 6.5V5C14 4.44772 13.5523 4 13 4H5C4.44772 4 4 4.44771 4 5V13.5247C4 13.8173 4.16123 14.086 4.41935 14.2237C4.72711 14.3878 5.10601 14.3313 5.35252 14.0845L7.31 12.125H8.375L9.875 10.625H7.31H6.68822ZM14.5605 10.4983L11.6701 13.75H16.9975C17.9963 13.75 18.7796 14.1104 19.3553 14.7048C19.9095 15.2771 20.2299 16.0224 20.4224 16.7443C20.7645 18.0276 20.7543 19.4618 20.7487 20.2544C20.7481 20.345 20.7475 20.4272 20.7475 20.4999L19.2475 20.5001C19.2475 20.4191 19.248 20.3319 19.2484 20.2394V20.2394C19.2526 19.4274 19.259 18.2035 18.973 17.1307C18.8156 16.5401 18.586 16.0666 18.2778 15.7483C17.9909 15.4521 17.5991 15.25 16.9975 15.25H11.8106L14.5303 17.9697L13.4696 19.0303L8.96956 14.5303L13.4394 9.50171L14.5605 10.4983Z"})}),c=window.wp.blockEditor,s=window.wp.components,a=window.wp.i18n,d=window.wp.element,u=window.wp.compose,p=window.wp.data,b=window.wp.apiFetch;var v=o.n(b);const w=window.wp.url,y={default:(0,a.__)("Enter the URL of a post from the Fediverse (Mastodon, Pixelfed, etc.) that you want to reply to.","activitypub"),checking:()=>(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.Spinner,{})," "+(0,a.__)("Checking URL...","activitypub")]}),valid:(0,a.__)("The author will be notified of your response.","activitypub"),error:(0,a.__)("This site doesn’t have ActivityPub enabled and won’t receive your reply.","activitypub")};(0,r.registerBlockType)("activitypub/reply",{edit:function({attributes:e,setAttributes:t,clientId:o,isSelected:i}){const{url:n="",embedPost:b=!1}=e,[h,f]=(0,d.useState)(y.default),[m,k]=(0,d.useState)(!1),[_,g]=(0,d.useState)(!1),x=(0,d.useRef)(),{insertAfterBlock:C,removeBlock:L,replaceInnerBlocks:j}=(0,p.useDispatch)("core/block-editor"),P=b&&!_&&m,B=(0,c.useInnerBlocksProps)({className:"activitypub-embed-container"},{allowedBlocks:["core/embed"],template:n&&P?[["core/embed",{url:n}]]:[],templateLock:"all"});(0,d.useEffect)(()=>{j(o,n&&P?[(0,r.createBlock)("core/embed",{url:n})]:[])},[n,P,o,j]),(0,d.useEffect)(()=>{f(n?_?y.checking():m?y.valid:y.error:y.default)},[n,_,m]);const O=()=>{setTimeout(()=>x.current?.focus(),50)},S=(0,d.useCallback)(async e=>{if(e)try{g(!0),new URL(e);try{const o=await v()({path:(0,w.addQueryArgs)("/oembed/1.0/proxy",{url:e,activitypub:!0})});o&&o.provider_name?(t({embedPost:!0,isValidActivityPub:!0}),k(!0)):(t({isValidActivityPub:!1}),k(!1))}catch(e){console.log("Could not fetch embed:",e),t({isValidActivityPub:!1}),k(!1)}}catch(e){t({isValidActivityPub:!1}),k(!1)}finally{g(!1)}else k(!1)},[b,t]),E=(0,u.useDebounce)(S,250);return(0,d.useEffect)(()=>{n&&E(n)},[n]),(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.InspectorControls,{children:(0,l.jsx)(s.PanelBody,{title:(0,a.__)("Settings","activitypub"),children:(0,l.jsx)(s.ToggleControl,{label:(0,a.__)("Embed Post","activitypub"),checked:!!b,onChange:e=>t({embedPost:e}),disabled:!m,help:(0,a.__)("Show embedded content from the URL.","activitypub"),__nextHasNoMarginBottom:!0})})}),(0,l.jsxs)("div",{onClick:O,...(0,c.useBlockProps)(),children:[i&&(0,l.jsx)(s.TextControl,{label:(0,a.__)("Your post is a reply to the following URL","activitypub"),value:n,onChange:e=>t({url:e}),help:h,onKeyDown:e=>{"Enter"===e.key&&C(o),!n&&["Backspace","Delete"].includes(e.key)&&L(o)},ref:x,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),P&&(0,l.jsx)("div",{...B}),n&&!P&&!i&&(0,l.jsx)("div",{className:"activitypub-reply-block-editor__preview",contentEditable:!1,onClick:O,style:{cursor:"pointer"},children:(0,l.jsx)("a",{href:n,className:"u-in-reply-to",target:"_blank",rel:"noreferrer",children:"↬"+n.replace(/^https?:\/\//,"")})})]})]})},save:()=>null,icon:n,transforms:{from:[{type:"block",blocks:["core/embed"],transform:e=>(0,r.createBlock)("activitypub/reply",{url:e.url||"",embedPost:!0})}],to:[{type:"block",blocks:["core/embed"],transform:e=>(0,r.createBlock)("core/embed",{url:e.url||""})}]}})}},o={};function r(e){var i=o[e];if(void 0!==i)return i.exports;var l=o[e]={exports:{}};return t[e](l,l.exports,r),l.exports}r.m=t,e=[],r.O=(t,o,i,l)=>{if(!o){var n=1/0;for(d=0;d=l)&&Object.keys(r.O).every(e=>r.O[e](o[s]))?o.splice(s--,1):(c=!1,l0&&e[d-1][2]>l;d--)e[d]=e[d-1];e[d]=[o,i,l]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={780:0,356:0};r.O.j=t=>0===e[t];var t=(t,o)=>{var i,l,[n,c,s]=o,a=0;if(n.some(t=>0!==e[t])){for(i in c)r.o(c,i)&&(r.m[i]=c[i]);if(s)var d=s(r)}for(t&&t(o);ar(561));i=r.O(i)})(); \ No newline at end of file diff --git a/includes/transformer/class-post.php b/includes/transformer/class-post.php index 156dbd5ce..4692d2c3a 100644 --- a/includes/transformer/class-post.php +++ b/includes/transformer/class-post.php @@ -587,8 +587,11 @@ protected function get_in_reply_to() { foreach ( $blocks as $block ) { if ( 'activitypub/reply' === $block['blockName'] && isset( $block['attrs']['url'] ) ) { - // We only support one reply block per post for now. - $reply_urls[] = $block['attrs']['url']; + + // Check if the URL has been validated as ActivityPub. Default to true for backwards compatibility. + if ( $block['attrs']['isValidActivityPub'] ?? true ) { + $reply_urls[] = $block['attrs']['url']; + } } } diff --git a/src/reply/block.json b/src/reply/block.json index 24537894b..3f76b9e5f 100644 --- a/src/reply/block.json +++ b/src/reply/block.json @@ -27,6 +27,10 @@ "embedPost": { "type": "boolean", "default": null + }, + "isValidActivityPub": { + "type": "boolean", + "default": true } } } diff --git a/src/reply/edit.js b/src/reply/edit.js index e78084b0c..44b966134 100644 --- a/src/reply/edit.js +++ b/src/reply/edit.js @@ -23,7 +23,7 @@ const HELP_TEXT = { ), valid: __( 'The author will be notified of your response.', 'activitypub' ), - error: __( 'This URL probably won’t receive your reply. We’ll still try.', 'activitypub' ), + error: __( 'This site doesn\u2019t have ActivityPub enabled and won\u2019t receive your reply.', 'activitypub' ), }; /** @@ -119,16 +119,19 @@ export default function Edit( { attributes, setAttributes, clientId, isSelected } ); if ( response && response.provider_name ) { - setAttributes( { embedPost: true } ); // Auto-enable embedding when we get valid embed info. + setAttributes( { embedPost: true, isValidActivityPub: true } ); // Auto-enable embedding when we get valid embed info. setIsValidEmbed( true ); } else { + setAttributes( { isValidActivityPub: false } ); setIsValidEmbed( false ); } } catch ( error ) { console.log( 'Could not fetch embed:', error ); + setAttributes( { isValidActivityPub: false } ); setIsValidEmbed( false ); } } catch ( error ) { + setAttributes( { isValidActivityPub: false } ); setIsValidEmbed( false ); } finally { setIsCheckingEmbed( false ); From e5a20438e88ca41dcf1c4fa3781b2d23e3964e72 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Thu, 2 Oct 2025 19:10:02 +0200 Subject: [PATCH 40/52] Improve inbox activity type handling and tests (#2260) --- .github/changelog/2260-from-description | 4 ++ includes/functions.php | 1 - includes/handler/class-inbox.php | 6 +- tests/includes/handler/class-test-inbox.php | 75 ++++++++++++++++++--- 4 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 .github/changelog/2260-from-description diff --git a/.github/changelog/2260-from-description b/.github/changelog/2260-from-description new file mode 100644 index 000000000..bf90b2fbe --- /dev/null +++ b/.github/changelog/2260-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed activity processing to handle QuoteRequest and other edge cases more reliably. diff --git a/includes/functions.php b/includes/functions.php index 2dac8121f..a99ef8ada 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -16,7 +16,6 @@ use Activitypub\Collection\Outbox; use Activitypub\Collection\Remote_Actors; use Activitypub\Transformer\Factory as Transformer_Factory; -use Activitypub\Transformer\Post; /** * Returns the ActivityPub default JSON-context. diff --git a/includes/handler/class-inbox.php b/includes/handler/class-inbox.php index ea1207afe..ef2ec3145 100644 --- a/includes/handler/class-inbox.php +++ b/includes/handler/class-inbox.php @@ -42,7 +42,7 @@ public static function handle_inbox_requests( $data, $user_id, $type, $activity * @param array $activity_types The activity types to persist in the inbox. */ $activity_types = \apply_filters( 'activitypub_persist_inbox_activity_types', array( 'Create', 'Update', 'Follow' ) ); - $activity_types = \array_map( 'strtolower', $activity_types ); + $activity_types = \array_map( 'Activitypub\camel_to_snake_case', $activity_types ); if ( ! \in_array( \strtolower( $type ), $activity_types, true ) ) { $success = false; @@ -56,9 +56,9 @@ public static function handle_inbox_requests( $data, $user_id, $type, $activity * @param array $object_types The object types to persist in the inbox. */ $object_types = \apply_filters( 'activitypub_persist_inbox_object_types', Base_Object::TYPES ); - $object_types = \array_map( 'strtolower', $object_types ); + $object_types = \array_map( 'Activitypub\camel_to_snake_case', $object_types ); - if ( isset( $data['object']['type'] ) && ! \in_array( \strtolower( $data['object']['type'] ), $object_types, true ) ) { + if ( is_array( $data['object'] ) && ( empty( $data['object']['type'] ) || ! \in_array( \strtolower( $data['object']['type'] ), $object_types, true ) ) ) { $success = false; $id = new \WP_Error( 'activitypub_inbox_ignored', 'Activity type not configured to be persisted in inbox.' ); } diff --git a/tests/includes/handler/class-test-inbox.php b/tests/includes/handler/class-test-inbox.php index 59f7c4a02..7c11cc888 100644 --- a/tests/includes/handler/class-test-inbox.php +++ b/tests/includes/handler/class-test-inbox.php @@ -24,6 +24,15 @@ class Test_Inbox extends \WP_UnitTestCase { * @param string $description Description of the test case. */ public function test_handle_inbox_requests( $activity_data, $activity_type, $expected_success, $description ) { + add_filter( + 'activitypub_persist_inbox_activity_types', + function ( $types ) { + $types[] = 'QuoteRequest'; + + return $types; + } + ); + $was_successful = false; \add_filter( @@ -43,6 +52,7 @@ function ( $data, $user_id, $success ) use ( &$was_successful ) { $this->assertEquals( $expected_success, $was_successful, $description ); + \remove_all_filters( 'activitypub_persist_inbox_activity_types' ); \remove_all_filters( 'activitypub_handled_inbox' ); } @@ -53,7 +63,7 @@ function ( $data, $user_id, $success ) use ( &$was_successful ) { */ public function inbox_requests_provider() { return array( - 'create_note_success' => array( + 'create_note_success' => array( array( 'id' => 'https://example.com/activity/1', 'type' => 'Create', @@ -63,11 +73,35 @@ public function inbox_requests_provider() { ), 'actor' => 'https://example.com/actor/1', ), - 'Create', + 'create', true, 'Should handle Create activity with Note object successfully', ), - 'create_person_failure' => array( + 'create_other_note_success' => array( + array( + 'id' => 'https://example.com/activity/1', + 'type' => 'Create', + 'object' => 'https://example.com/object/1', + 'actor' => 'https://example.com/actor/1', + ), + 'create', + true, + 'Should handle Create activity with Note object successfully', + ), + 'create_note_failure' => array( + array( + 'id' => 'https://example.com/activity/1', + 'type' => 'Create', + 'object' => array( + 'id' => 'https://example.com/object/1', + ), + 'actor' => 'https://example.com/actor/1', + ), + 'create', + false, + 'Should handle Create activity with Note object successfully', + ), + 'create_person_failure' => array( array( 'id' => 'https://example.com/activity/2', 'type' => 'Create', @@ -77,11 +111,11 @@ public function inbox_requests_provider() { ), 'actor' => 'https://example.com/actor/2', ), - 'Create', + 'create', false, 'Should not handle Create activity with Person object', ), - 'delete_article_failure' => array( + 'delete_article_failure' => array( array( 'id' => 'https://example.com/activity/3', 'type' => 'Delete', @@ -91,11 +125,11 @@ public function inbox_requests_provider() { ), 'actor' => 'https://example.com/actor/3', ), - 'Delete', + 'delete', false, 'Should not handle Delete activity with Article object', ), - 'update_article_success' => array( + 'update_article_success' => array( array( 'id' => 'https://example.com/activity/4', 'type' => 'Update', @@ -105,10 +139,35 @@ public function inbox_requests_provider() { ), 'actor' => 'https://example.com/actor/4', ), - 'Update', + 'update', true, 'Should handle Update activity successfully', ), + 'quote_request_success' => array( + array( + 'id' => 'https://example.com/activity/4', + 'type' => 'QuoteRequest', + 'actor' => 'https://example.com/actor/4', + 'object' => array( + 'id' => 'https://example.com/object/4', + 'type' => 'Note', + ), + 'instrument' => array( + 'type' => 'Note', + 'id' => 'https://example.com/users/bob/statuses/1', + 'attributedTo' => 'https://example.com/users/bob', + 'to' => array( + 'https://www.w3.org/ns/activitystreams#Public', + 'https://example.com/users/alice', + ), + 'content' => "I am quoting alice's post
RE: https://example.com/users/alice/statuses/1", + 'quote' => 'https://example.com/users/alice/statuses/1', + ), + ), + 'quote_request', + true, + 'Should handle QuoteRequest activity successfully', + ), ); } } From a62cfdc781ac7f1ae6694830cbfd76161357ab8d Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Thu, 2 Oct 2025 19:54:19 +0200 Subject: [PATCH 41/52] Remove duplicate webfinger_user_data filter (#2269) --- integration/class-webfinger.php | 1 - tests/integration/class-test-webfinger.php | 1 - 2 files changed, 2 deletions(-) diff --git a/integration/class-webfinger.php b/integration/class-webfinger.php index 3eed7b9dd..359d8c48c 100644 --- a/integration/class-webfinger.php +++ b/integration/class-webfinger.php @@ -24,7 +24,6 @@ public static function init() { \add_filter( 'webfinger_user_data', array( self::class, 'add_user_discovery' ), 1, 3 ); \add_filter( 'webfinger_data', array( self::class, 'add_pseudo_user_discovery' ), 1, 2 ); - \add_filter( 'webfinger_user_data', array( self::class, 'add_interaction_links' ), 11 ); \add_filter( 'webfinger_data', array( self::class, 'add_interaction_links' ), 11 ); } diff --git a/tests/integration/class-test-webfinger.php b/tests/integration/class-test-webfinger.php index fe39bb937..a7a957385 100644 --- a/tests/integration/class-test-webfinger.php +++ b/tests/integration/class-test-webfinger.php @@ -88,7 +88,6 @@ public function test_init_registers_hooks() { // Check that hooks are registered. $this->assertNotFalse( has_filter( 'webfinger_user_data', array( Webfinger::class, 'add_user_discovery' ) ) ); $this->assertNotFalse( has_filter( 'webfinger_data', array( Webfinger::class, 'add_pseudo_user_discovery' ) ) ); - $this->assertNotFalse( has_filter( 'webfinger_user_data', array( Webfinger::class, 'add_interaction_links' ) ) ); $this->assertNotFalse( has_filter( 'webfinger_data', array( Webfinger::class, 'add_interaction_links' ) ) ); } From 4c88cdf06fa4dacfb48a0c9dfcef68d21d474143 Mon Sep 17 00:00:00 2001 From: Terence Eden Date: Thu, 2 Oct 2025 21:41:47 +0100 Subject: [PATCH 42/52] Fix broken translation link in CONTRIBUTING.md (#2276) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 81cb38135..a4dd7f3cd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,7 +42,7 @@ This helps us organize feedback effectively and ensures your questions get the r ## Translate the plugin -If you speak a foreign language, you can help translate the ActivityPub plugin into your own language. [here is how.](docs/translations) +If you speak a foreign language, you can help translate the ActivityPub plugin into your own language. [Here is how to get started with translating.](docs/translations.md) ## License From de4651c9d868de823af2f8b82ed894c655c67f3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 05:43:41 +0000 Subject: [PATCH 43/52] Bump @wordpress/editor from 14.31.0 to 14.32.0 (#2283) --- package-lock.json | 390 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 196 insertions(+), 196 deletions(-) diff --git a/package-lock.json b/package-lock.json index d709d9d3d..e4ff5e92e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@wordpress/data": "^10.0.0", "@wordpress/dom-ready": "^4.0.0", "@wordpress/edit-post": "^8.31.0", - "@wordpress/editor": "^14.30.0", + "@wordpress/editor": "^14.32.0", "@wordpress/element": "^6.0.0", "@wordpress/env": "^10.31.0", "@wordpress/i18n": "^6.0.0", @@ -6939,9 +6939,9 @@ "license": "MIT" }, "node_modules/@wordpress/base-styles": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.7.0.tgz", - "integrity": "sha512-Ob2+lGMFJnPZE5OQLEsdvs2Rp1RxemqHufJFg00c5mWCXokKPaDBIa/EcS/O3nsQGA3qYHciUSM1uIYLOUdbzA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.8.0.tgz", + "integrity": "sha512-x3LCQ4DuIOg58LyQRZtI6shmNKCk2zuKGwIEMH7h7MMri/Q95ehR6Sub8dKiUL4AHktdlweouJwbHaqrXPkd0Q==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7294,29 +7294,29 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.31.0.tgz", - "integrity": "sha512-Rp/LcmTwBL8uITYmj2HRV6GGT1MKvRvaU594fq+CTZa9kNYDUwhnG7xtC9+JbjPSdZ9zLtHVQUdKbwRvpkcibw==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.32.0.tgz", + "integrity": "sha512-cHcEhoucu5YhPTpo2I+NVlxINPMTnh8cXcfrBmrqAnwFA5MttMhF8av9lnz6k3ieY9eB99rY+BDcE09+jkRl7w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/is-shallow-equal": "^5.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/rich-text": "^7.31.0", - "@wordpress/sync": "^1.31.0", - "@wordpress/undo-manager": "^1.31.0", - "@wordpress/url": "^4.31.0", - "@wordpress/warning": "^3.31.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/is-shallow-equal": "^5.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/rich-text": "^7.32.0", + "@wordpress/sync": "^1.32.0", + "@wordpress/undo-manager": "^1.32.0", + "@wordpress/url": "^4.32.0", + "@wordpress/warning": "^3.32.0", "change-case": "^4.1.2", "equivalent-key-map": "^0.2.2", "fast-deep-equal": "^3.1.3", @@ -7364,27 +7364,27 @@ } }, "node_modules/@wordpress/dataviews": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-9.0.0.tgz", - "integrity": "sha512-epjNwINFMsql3FG8bhBVkQlPeUzUTgTvkLYrGzmCwM18nLu4L17bbvfhRMG/Nx+49SO+hd8bN2Rcgj3RG7eATg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-9.1.0.tgz", + "integrity": "sha512-F7l2td904Aoe8rfCULHOO33pVyPj4NfWjb1cSLoXF+5Ic0JXx7L9rsGNr7qx4b4w52TssrZ22XFgfd5jsR0w5w==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@ariakit/react": "^0.4.15", "@babel/runtime": "7.25.7", - "@wordpress/base-styles": "^6.7.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/date": "^5.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/primitives": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/url": "^4.31.0", - "@wordpress/warning": "^3.31.0", + "@wordpress/base-styles": "^6.8.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/date": "^5.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/primitives": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/url": "^4.32.0", + "@wordpress/warning": "^3.32.0", "clsx": "^2.1.1", "colord": "^2.7.0", "date-fns": "^4.1.0", @@ -7568,48 +7568,48 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.31.0.tgz", - "integrity": "sha512-J5D0EmTMuw0YUer0t8fgC1n/Avuu+TbCtfJoQLgCcI4Bi6ZwjiKpoooBDBpKCVqCV+Xut3R9thLaSJcyDVpTrA==", + "version": "14.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.32.0.tgz", + "integrity": "sha512-MZEY9gSFDzWGNEXneT90YzkgcduWVWuaQJqIKGR5G23FBmZUsZsC58mEGFepwDHB6W868ZGHyG91ZTPlXat+Jg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/commands": "^1.31.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/dataviews": "^9.0.0", - "@wordpress/date": "^5.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/fields": "^0.23.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/interface": "^9.16.0", - "@wordpress/keyboard-shortcuts": "^5.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/media-utils": "^5.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/patterns": "^2.31.0", - "@wordpress/plugins": "^7.31.0", - "@wordpress/preferences": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/reusable-blocks": "^5.31.0", - "@wordpress/rich-text": "^7.31.0", - "@wordpress/server-side-render": "^6.7.0", - "@wordpress/url": "^4.31.0", - "@wordpress/warning": "^3.31.0", - "@wordpress/wordcount": "^4.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/commands": "^1.32.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/dataviews": "^9.1.0", + "@wordpress/date": "^5.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/fields": "^0.24.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/interface": "^9.17.0", + "@wordpress/keyboard-shortcuts": "^5.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/media-utils": "^5.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/patterns": "^2.32.0", + "@wordpress/plugins": "^7.32.0", + "@wordpress/preferences": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/reusable-blocks": "^5.32.0", + "@wordpress/rich-text": "^7.32.0", + "@wordpress/server-side-render": "^6.8.0", + "@wordpress/url": "^4.32.0", + "@wordpress/warning": "^3.32.0", + "@wordpress/wordcount": "^4.32.0", "change-case": "^4.1.2", "client-zip": "^2.4.5", "clsx": "^2.1.1", @@ -7795,36 +7795,36 @@ } }, "node_modules/@wordpress/fields": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@wordpress/fields/-/fields-0.23.0.tgz", - "integrity": "sha512-Nc6c8JlITyO9Y1CJKs0KN7YZbGi11ITeJNVT/WCjhgi7HlDk+hDHuJaIZCNxiTICspDiVQKiVBcN/c0CQ1uv1A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@wordpress/fields/-/fields-0.24.0.tgz", + "integrity": "sha512-1GdI/WWuLRYnvmLF0us+7hSiUgEUSaI5Fp9xPKpUVVVa3pnh12lFUvNGlyWjWQjkRAihJWv1qOfiSedDvJSDuw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/dataviews": "^9.0.0", - "@wordpress/date": "^5.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/media-utils": "^5.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/patterns": "^2.31.0", - "@wordpress/primitives": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/router": "^1.31.0", - "@wordpress/url": "^4.31.0", - "@wordpress/warning": "^3.31.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/dataviews": "^9.1.0", + "@wordpress/date": "^5.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/media-utils": "^5.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/patterns": "^2.32.0", + "@wordpress/primitives": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/router": "^1.32.0", + "@wordpress/url": "^4.32.0", + "@wordpress/warning": "^3.32.0", "change-case": "4.1.2", "client-zip": "^2.4.5", "clsx": "2.1.1", @@ -7936,24 +7936,24 @@ } }, "node_modules/@wordpress/interface": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-9.16.0.tgz", - "integrity": "sha512-VWuYYpYz+J9kN6U1qhE1Te4JKSMEb0OvKSrb9+ErDNLYM5f9yVcPlOXmbwnGcAGYMRxZn7S+kUpBHMqp7jUz2w==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-9.17.0.tgz", + "integrity": "sha512-Y0jS2iNEAVC+1JlKjRwOyMEnFKmaSPehUZNnm2VsvTJIT4/W4GuQxOAE4GaEWa2+2aG7Jrr+NcH+HZOUXPdCEA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/plugins": "^7.31.0", - "@wordpress/preferences": "^4.31.0", - "@wordpress/viewport": "^6.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/plugins": "^7.32.0", + "@wordpress/preferences": "^4.32.0", + "@wordpress/viewport": "^6.32.0", "clsx": "^2.1.1" }, "engines": { @@ -8052,18 +8052,18 @@ } }, "node_modules/@wordpress/media-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.31.0.tgz", - "integrity": "sha512-41O67AO/axvxYbrCp/rgGsYTrSbIWd7b7IC3R7nlSCiSw/UFOqET+pJ7KEu/m2dQTQPCtIoODiVVAD5S7oTKeg==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.32.0.tgz", + "integrity": "sha512-tDlOxyLSKbAZrVgQ92bp6MQHHD7gxTyfE8QmYjft55UaZDXOGo9Q5aLsQ+5PoU+ZuTwImvOpt0EBiO5I/PWa4A==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/private-apis": "^1.31.0" + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/private-apis": "^1.32.0" }, "engines": { "node": ">=18.12.0", @@ -8104,27 +8104,27 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.31.0.tgz", - "integrity": "sha512-y6ZC9jnh69p3XNTusvCHN8R05eSAZw91EnEBvxyKvzd0dtRG9f6Pxx/IhXZqp4nvtR3oIutgVW2sMq2LcpE0kg==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.32.0.tgz", + "integrity": "sha512-UrkW1fS89P4SvLm8BXEu4+ENQwnuKF+ljC/Z4X0vhISpTdGxr05FAxzu04LhYl/He3WbfZOzhEDykSs1TzFilg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/url": "^4.31.0" + "@wordpress/a11y": "^4.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/url": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -8136,20 +8136,20 @@ } }, "node_modules/@wordpress/plugins": { - "version": "7.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.31.0.tgz", - "integrity": "sha512-0Hm06PfeFlMqNvtu5pAfTCpiYLD+PEPfag9W08F0XhcJHFfqnlpGp8OeWGGOQif91cu9CRKU080MSDK1jvDJhQ==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.32.0.tgz", + "integrity": "sha512-y4On9jeMfbtkNj9TjSD8xhrbl/vxhVBXUwiLlzFOqecHp7ggHvxY4yINXS9nijQ+KQoGbg+74uxtM1XRYQ/Muw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/is-shallow-equal": "^5.31.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/is-shallow-equal": "^5.32.0", "memize": "^2.0.1" }, "engines": { @@ -8290,24 +8290,24 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.31.0.tgz", - "integrity": "sha512-jDGEqkLSNEUAjVpurLdPiDdcqG5N0t+CDGUke8J5hegV4XLSMOEfXI6xSg44EHNRx1NakvRLXtCnT5/6vIV8Pw==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.32.0.tgz", + "integrity": "sha512-aMD5dFNu2+orafsfTHuFfQbB6BT4J9a1Y6FTwz+ollr9Q8Ng8qlt79qS2rcGEBHTyxTD2SOxPVU3+DAysl6KnQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/components": "^30.4.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/url": "^4.31.0" + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/components": "^30.5.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/url": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -8346,17 +8346,17 @@ } }, "node_modules/@wordpress/router": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-1.31.0.tgz", - "integrity": "sha512-NeEWZg+VU7EdbNYosDcpcSEx8vgizDCCKwm5qRVj4S6MtuYR7ZWZu5oXm4QdDCZjUytKv6gnuklAQO+xLRsDww==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-1.32.0.tgz", + "integrity": "sha512-nP/YJH7cQbVOODfjTw+dwnBg6dm3GRc6KtI2rx3kAfcd/uFtE6tZs31t90HTKOAwFMsf3k0R8yItX0nes9lE0Q==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/compose": "^7.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/url": "^4.31.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/url": "^4.32.0", "history": "^5.3.0", "route-recognizer": "^0.3.4" }, @@ -8493,22 +8493,22 @@ "license": "MIT" }, "node_modules/@wordpress/server-side-render": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-6.7.0.tgz", - "integrity": "sha512-Qa2ZEnksWIeWOIG8pFj5mgqFgbDYyH7gjx5cU9XibGcnJY6CHYwS+o9fODfkt1i2gQHT+17Yv0i4hQvFo5tLLg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-6.8.0.tgz", + "integrity": "sha512-ElHEqd4Yd7Kujp2aSv5lgrsEGSO7p8WaEFwhJSDpVxb56aVwk/WwtNtVXryFlQVXGURezmbUQSXwanN7G/HdFA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/url": "^4.31.0" + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/url": "^4.32.0" }, "engines": { "node": ">=18.12.0", @@ -8570,15 +8570,15 @@ } }, "node_modules/@wordpress/sync": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-1.31.0.tgz", - "integrity": "sha512-CYb3ayrrsQ7ttEi9zDVm+x0JJx7kRW6Fb/+tkCI1WKJBrxvRZbNK/QrT604AoWICeGi0j5baFoKUWxkibj1xFg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-1.32.0.tgz", + "integrity": "sha512-yKahpmYRm1VbXvU/6M2eXiQgMWl45VCcxDgMO+Y/2Wh1C/HyVZdgsNpg5c2ikXUolyKRKd7vuSMIn+agSceHTw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", "@types/simple-peer": "^9.11.5", - "@wordpress/url": "^4.31.0", + "@wordpress/url": "^4.32.0", "import-locals": "^2.0.0", "lib0": "^0.2.42", "simple-peer": "^9.11.0", @@ -8665,16 +8665,16 @@ } }, "node_modules/@wordpress/viewport": { - "version": "6.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.31.0.tgz", - "integrity": "sha512-lqQCXHQpFTawJjvus3trUYm2tVxWU1lTza1a5HWOtQaKFqKs9lP3Bpv0ViMPNv77m0fldnDNsFRMAVIVUedh5g==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.32.0.tgz", + "integrity": "sha512-2cPqzOH5ENHAk/p3xHE4AJU9Iw9cN2YHOFe/VqQoiJPlCzl7eM0nF4cjdSE9xBFmR7N4xot5SsKpk+JzWYw7Og==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/compose": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0" + "@wordpress/compose": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0" }, "engines": { "node": ">=18.12.0", diff --git a/package.json b/package.json index 74246e105..6de38d95e 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@wordpress/data": "^10.0.0", "@wordpress/dom-ready": "^4.0.0", "@wordpress/edit-post": "^8.31.0", - "@wordpress/editor": "^14.30.0", + "@wordpress/editor": "^14.32.0", "@wordpress/element": "^6.0.0", "@wordpress/env": "^10.31.0", "@wordpress/i18n": "^6.0.0", From 01e26600b3d9c23c4b47a83744fcca917ef0b4e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 05:51:25 +0000 Subject: [PATCH 44/52] Bump @wordpress/env from 10.31.0 to 10.32.0 (#2280) --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4ff5e92e..35c5ebed4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@wordpress/edit-post": "^8.31.0", "@wordpress/editor": "^14.32.0", "@wordpress/element": "^6.0.0", - "@wordpress/env": "^10.31.0", + "@wordpress/env": "^10.32.0", "@wordpress/i18n": "^6.0.0", "@wordpress/icons": "^10.10.0", "@wordpress/interactivity": "^6.30.0", @@ -7653,9 +7653,9 @@ } }, "node_modules/@wordpress/env": { - "version": "10.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.31.0.tgz", - "integrity": "sha512-y/qCaz6CpAkjNgdCyZ7IQk56E0tvED6k6lwebWzlV5uN6fnoftjsAzh8RMu4Q+yxjycQaAv7TEd1K4kj/Y4zww==", + "version": "10.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.32.0.tgz", + "integrity": "sha512-GHpcbfh/rUoXd7hwBy84ZBd1uhqQntd9CHrxk5hK/lLM9LULLwrRFC21ZwYwZuNjpdV+DslpsX0N/poe3ybaJQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { diff --git a/package.json b/package.json index 6de38d95e..8c0cebeef 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@wordpress/edit-post": "^8.31.0", "@wordpress/editor": "^14.32.0", "@wordpress/element": "^6.0.0", - "@wordpress/env": "^10.31.0", + "@wordpress/env": "^10.32.0", "@wordpress/i18n": "^6.0.0", "@wordpress/icons": "^10.10.0", "@wordpress/interactivity": "^6.30.0", From 7db4d64b503a58a1d4f2b5bc3c7fb81b7a5e9033 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 05:54:45 +0000 Subject: [PATCH 45/52] Bump @wordpress/edit-post from 8.31.0 to 8.32.0 (#2282) --- package-lock.json | 180 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35c5ebed4..5d835a91c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@wordpress/core-data": "^7.22.0", "@wordpress/data": "^10.0.0", "@wordpress/dom-ready": "^4.0.0", - "@wordpress/edit-post": "^8.31.0", + "@wordpress/edit-post": "^8.32.0", "@wordpress/editor": "^14.32.0", "@wordpress/element": "^6.0.0", "@wordpress/env": "^10.32.0", @@ -7031,46 +7031,46 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.31.0.tgz", - "integrity": "sha512-BlqpLwn4zyUauwrkOO2agHD9Xo93jZcdapqk0IzvbYR9BoJJIZjj3JKp8huc5diVS79KkS590rqs7Yk6sZJWNg==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.32.0.tgz", + "integrity": "sha512-Q5+gKQcaqdUBgxDIbUo8FgapH1vwRE2J2eH5eXmKtoM++Nx94yOZDQumo+0yWluInsCgXBcVKpqCSxireKwu4g==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/autop": "^4.31.0", - "@wordpress/blob": "^4.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/date": "^5.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/escape-html": "^3.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/interactivity": "^6.31.0", - "@wordpress/interactivity-router": "^2.31.0", - "@wordpress/keyboard-shortcuts": "^5.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/patterns": "^2.31.0", - "@wordpress/primitives": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/reusable-blocks": "^5.31.0", - "@wordpress/rich-text": "^7.31.0", - "@wordpress/server-side-render": "^6.7.0", - "@wordpress/url": "^4.31.0", - "@wordpress/viewport": "^6.31.0", - "@wordpress/wordcount": "^4.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/autop": "^4.32.0", + "@wordpress/blob": "^4.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/date": "^5.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/escape-html": "^3.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/interactivity": "^6.32.0", + "@wordpress/interactivity-router": "^2.32.0", + "@wordpress/keyboard-shortcuts": "^5.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/patterns": "^2.32.0", + "@wordpress/primitives": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/reusable-blocks": "^5.32.0", + "@wordpress/rich-text": "^7.32.0", + "@wordpress/server-side-render": "^6.8.0", + "@wordpress/url": "^4.32.0", + "@wordpress/viewport": "^6.32.0", + "@wordpress/wordcount": "^4.32.0", "change-case": "^4.1.2", "clsx": "^2.1.1", "colord": "^2.7.0", @@ -7520,41 +7520,41 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.31.0.tgz", - "integrity": "sha512-hPNmXDaVMfVk2BM070xpYUuTKZFm4cr7NcQLcbWc1TjXHx1HOWpB/rjdUUTaDsEn1Ox3+yH5qh4O+309el3NYw==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.32.0.tgz", + "integrity": "sha512-5BM/Ez8cjtvT5RXkG118zgqITvp1/hay0djbBuuwS1/c6+PQDq5VV3e4oVYv3ay1Lq9Wk81XAE7Ofz4nzDOKMQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/a11y": "^4.31.0", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/block-library": "^9.31.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/commands": "^1.31.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/deprecated": "^4.31.0", - "@wordpress/dom": "^4.31.0", - "@wordpress/editor": "^14.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/hooks": "^4.31.0", - "@wordpress/html-entities": "^4.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/keyboard-shortcuts": "^5.31.0", - "@wordpress/keycodes": "^4.31.0", - "@wordpress/notices": "^5.31.0", - "@wordpress/plugins": "^7.31.0", - "@wordpress/preferences": "^4.31.0", - "@wordpress/private-apis": "^1.31.0", - "@wordpress/url": "^4.31.0", - "@wordpress/viewport": "^6.31.0", - "@wordpress/warning": "^3.31.0", - "@wordpress/widgets": "^4.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/block-library": "^9.32.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/commands": "^1.32.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/deprecated": "^4.32.0", + "@wordpress/dom": "^4.32.0", + "@wordpress/editor": "^14.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/hooks": "^4.32.0", + "@wordpress/html-entities": "^4.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/keyboard-shortcuts": "^5.32.0", + "@wordpress/keycodes": "^4.32.0", + "@wordpress/notices": "^5.32.0", + "@wordpress/plugins": "^7.32.0", + "@wordpress/preferences": "^4.32.0", + "@wordpress/private-apis": "^1.32.0", + "@wordpress/url": "^4.32.0", + "@wordpress/viewport": "^6.32.0", + "@wordpress/warning": "^3.32.0", + "@wordpress/widgets": "^4.32.0", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -7905,9 +7905,9 @@ } }, "node_modules/@wordpress/interactivity": { - "version": "6.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.31.0.tgz", - "integrity": "sha512-5qpjRrlvF7sV3r9pUi3Y3fMD07/aeBA8zj4AmMgnRvTAw87580bszwNcUKVChDzVP8Bjpi2QMHGvhY36aXjFpQ==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.32.0.tgz", + "integrity": "sha512-acOMrgEPVwa08MhGZlrGwtsiOmAlTaHM6I4LD5ssEeUL5+Yc7PrwOqfqZ1Y8vPuifthUv1BQ1cJ1JeHBCOxaNg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7920,14 +7920,14 @@ } }, "node_modules/@wordpress/interactivity-router": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.31.0.tgz", - "integrity": "sha512-j3KDaT97kQcbW5JH1Nf+SeaoCWEbo8JfNkf+6U8sZl76D5mjx8K+AGQjMnJhgGDXYrutpDl+1XjwqBvA0NDFqg==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.32.0.tgz", + "integrity": "sha512-3hVMD4nIEfBwPoZ2DXBzgCt/+rLnmflxgk8pnFLp3FBL69KwEoN92NuNEOID3HIQu3v1z/DElSbpuLZIyjHeZw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/a11y": "^4.31.0", - "@wordpress/interactivity": "^6.31.0", + "@wordpress/a11y": "^4.32.0", + "@wordpress/interactivity": "^6.32.0", "es-module-lexer": "^1.5.4" }, "engines": { @@ -8696,24 +8696,24 @@ } }, "node_modules/@wordpress/widgets": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.31.0.tgz", - "integrity": "sha512-bhFyLEl0+2ZSnCUK/+/TO0agyWL5kK3uPIWL1m3i/WFoKgoF2rtZDlEMhQcsKbLSwvMllegu5sJZHWawZnL4Cw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.32.0.tgz", + "integrity": "sha512-8flv3T18TYf20kEXvGNVzqU+p+rC3KJXdutw9u7gANjc1hXLe3OOKA7xAKqYjoHhnYzDA8Pi3/XYG8Qx3LpGcA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", - "@wordpress/api-fetch": "^7.31.0", - "@wordpress/block-editor": "^15.4.0", - "@wordpress/blocks": "^15.4.0", - "@wordpress/components": "^30.4.0", - "@wordpress/compose": "^7.31.0", - "@wordpress/core-data": "^7.31.0", - "@wordpress/data": "^10.31.0", - "@wordpress/element": "^6.31.0", - "@wordpress/i18n": "^6.4.0", - "@wordpress/icons": "^10.31.0", - "@wordpress/notices": "^5.31.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/block-editor": "^15.5.0", + "@wordpress/blocks": "^15.5.0", + "@wordpress/components": "^30.5.0", + "@wordpress/compose": "^7.32.0", + "@wordpress/core-data": "^7.32.0", + "@wordpress/data": "^10.32.0", + "@wordpress/element": "^6.32.0", + "@wordpress/i18n": "^6.5.0", + "@wordpress/icons": "^10.32.0", + "@wordpress/notices": "^5.32.0", "clsx": "^2.1.1" }, "engines": { diff --git a/package.json b/package.json index 8c0cebeef..205d10b85 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@wordpress/core-data": "^7.22.0", "@wordpress/data": "^10.0.0", "@wordpress/dom-ready": "^4.0.0", - "@wordpress/edit-post": "^8.31.0", + "@wordpress/edit-post": "^8.32.0", "@wordpress/editor": "^14.32.0", "@wordpress/element": "^6.0.0", "@wordpress/env": "^10.32.0", From 0705d194bf902af6f4591f2b50986a8bab0176ea Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Fri, 3 Oct 2025 05:50:10 -0500 Subject: [PATCH 46/52] Fix Prettify workflow for pull requests from forks (#2277) --- .github/workflows/format.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index de4227065..b34b30bbf 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -13,7 +13,7 @@ jobs: - name: Checkout code uses: actions/checkout@v5 with: - ref: ${{ github.head_ref }} + ref: ${{ github.event.pull_request.head.sha }} - name: Setup Node.js uses: actions/setup-node@v5 @@ -29,12 +29,17 @@ jobs: - name: Check for changes and commit run: | if [ -n "$(git status --porcelain)" ]; then - echo "Formatting changes detected, committing files..." - git config user.name "Automattic Bot" - git config user.email "sysops+ghmatticbot@automattic.com" - git add . - git commit -m "Prettify" - git push + if [ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]; then + echo "::error::Formatting changes detected in PR from fork. Please run 'npm run format' locally and push the changes." + exit 1 + else + echo "Formatting changes detected, committing files..." + git config user.name "Automattic Bot" + git config user.email "sysops+ghmatticbot@automattic.com" + git add . + git commit -m "Prettify" + git push + fi else echo "No formatting changes needed" fi From b88abc7f3f097642a4d6ff18c73b9fe05dbd27fb Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Fri, 3 Oct 2025 05:51:08 -0500 Subject: [PATCH 47/52] Tests: Avoid using `runInSeparateProcess` where possible (#2275) --- tests/integration/class-test-jetpack.php | 196 ++++++++--------------- 1 file changed, 66 insertions(+), 130 deletions(-) diff --git a/tests/integration/class-test-jetpack.php b/tests/integration/class-test-jetpack.php index d0e269f70..b42671439 100644 --- a/tests/integration/class-test-jetpack.php +++ b/tests/integration/class-test-jetpack.php @@ -156,68 +156,6 @@ public function test_c_manager_connection_check() { $this->assertTrue( $manager->is_user_connected(), 'Mock Manager should return connected' ); } - /** - * Test init method skips sync hooks when IS_WPCOM is defined. - * - * @covers ::init - * @runInSeparateProcess - * @preserveGlobalState disabled - */ - public function test_init_skips_sync_hooks_on_wpcom() { - // Clear any existing hooks first. - remove_all_filters( 'jetpack_sync_post_meta_whitelist' ); - remove_all_filters( 'jetpack_sync_comment_meta_whitelist' ); - remove_all_filters( 'jetpack_sync_whitelisted_comment_types' ); - remove_all_filters( 'jetpack_json_api_comment_types' ); - remove_all_filters( 'jetpack_api_include_comment_types_count' ); - remove_all_filters( 'activitypub_following_row_actions' ); - remove_all_filters( 'pre_option_activitypub_following_ui' ); - - // Test the normal case first (IS_WPCOM not defined). - if ( ! defined( 'IS_WPCOM' ) ) { - Jetpack::init(); - - // Sync hooks should be registered when IS_WPCOM is not defined. - $this->assertTrue( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); - $this->assertTrue( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); - $this->assertTrue( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); - $this->assertTrue( has_filter( 'jetpack_json_api_comment_types' ) ); - $this->assertTrue( has_filter( 'jetpack_api_include_comment_types_count' ) ); - - // Following UI hooks should NOT be registered in normal test environment. - $this->assertFalse( has_filter( 'activitypub_following_row_actions' ) ); - $this->assertFalse( has_filter( 'pre_option_activitypub_following_ui' ) ); - - // Clear hooks again for the WPCOM simulation. - remove_all_filters( 'jetpack_sync_post_meta_whitelist' ); - remove_all_filters( 'jetpack_sync_comment_meta_whitelist' ); - remove_all_filters( 'jetpack_sync_whitelisted_comment_types' ); - remove_all_filters( 'jetpack_json_api_comment_types' ); - remove_all_filters( 'jetpack_api_include_comment_types_count' ); - remove_all_filters( 'activitypub_following_row_actions' ); - remove_all_filters( 'pre_option_activitypub_following_ui' ); - } - - // Now simulate IS_WPCOM behavior by defining the constant temporarily. - // We use a runInSeparateProcess annotation to isolate this test. - if ( ! defined( 'IS_WPCOM' ) ) { - define( 'IS_WPCOM', true ); - } - - Jetpack::init(); - - // When IS_WPCOM is defined, sync hooks should NOT be registered. - $this->assertFalse( has_filter( 'jetpack_sync_post_meta_whitelist' ) ); - $this->assertFalse( has_filter( 'jetpack_sync_comment_meta_whitelist' ) ); - $this->assertFalse( has_filter( 'jetpack_sync_whitelisted_comment_types' ) ); - $this->assertFalse( has_filter( 'jetpack_json_api_comment_types' ) ); - $this->assertFalse( has_filter( 'jetpack_api_include_comment_types_count' ) ); - - // But following UI hooks should be registered when IS_WPCOM is true. - $this->assertTrue( has_filter( 'activitypub_following_row_actions' ) ); - $this->assertTrue( has_filter( 'pre_option_activitypub_following_ui' ) ); - } - /** * Test add_sync_meta method adds ActivityPub meta keys. * @@ -278,6 +216,66 @@ public function test_add_comment_types() { $this->assertEquals( $updated_types, array_unique( $updated_types ) ); } + /** + * Test pre_option_activitypub_following_ui method forces UI to be enabled. + * + * @covers ::pre_option_activitypub_following_ui + */ + public function test_pre_option_activitypub_following_ui() { + $result = Jetpack::pre_option_activitypub_following_ui(); + + $this->assertEquals( '1', $result ); + } + + /** + * Test integration with actual WordPress filters. + */ + public function test_filter_integration() { + // Initialize Jetpack integration. + Jetpack::init(); + + // Test sync meta filter integration (only if not on WordPress.com). + if ( ! defined( 'IS_WPCOM' ) ) { + $sync_meta = apply_filters( 'jetpack_sync_post_meta_whitelist', array() ); + $this->assertContains( Followers::FOLLOWER_META_KEY, $sync_meta ); + $this->assertContains( Following::FOLLOWING_META_KEY, $sync_meta ); + + // Test comment meta filter integration. + $comment_meta = apply_filters( 'jetpack_sync_comment_meta_whitelist', array() ); + $this->assertContains( 'avatar_url', $comment_meta ); + + // Test comment types filter integration. + $comment_types = apply_filters( 'jetpack_sync_whitelisted_comment_types', array() ); + $expected_ap_types = Comment::get_comment_type_slugs(); + foreach ( $expected_ap_types as $type ) { + $this->assertContains( $type, $comment_types ); + } + } else { + // On WordPress.com, sync filters should not be registered. + // Test that they are indeed not registered. + $sync_meta = apply_filters( 'jetpack_sync_post_meta_whitelist', array() ); + $this->assertNotContains( Followers::FOLLOWER_META_KEY, $sync_meta ); + $this->assertNotContains( Following::FOLLOWING_META_KEY, $sync_meta ); + + $comment_meta = apply_filters( 'jetpack_sync_comment_meta_whitelist', array() ); + $this->assertNotContains( 'avatar_url', $comment_meta ); + } + + // Test following UI filter integration - test direct method calls. + $ui_result = Jetpack::pre_option_activitypub_following_ui(); + $this->assertEquals( '1', $ui_result ); + + // Test reader link method directly. + $test_item = array( + 'id' => 123, + 'status' => 'active', + 'identifier' => 'https://example.com/feed', + ); + $original_actions = array( 'edit' => 'Edit' ); + $updated_actions = Jetpack::add_reader_link( $original_actions, $test_item ); + $this->assertArrayHasKey( 'reader', $updated_actions ); + } + /** * Data provider for Reader link test scenarios. * @@ -285,24 +283,24 @@ public function test_add_comment_types() { */ public function reader_link_data() { return array( - 'active following with feed ID' => array( + 'active following without feed ID' => array( 'item' => array( 'id' => 123, 'status' => 'active', 'identifier' => 'https://example.com/feed', ), - 'feed_id' => 456, - 'expected_url' => 'https://wordpress.com/reader/feeds/456', + 'feed_id' => false, + 'expected_url' => 'https://wordpress.com/reader/feeds/lookup/https%3A%2F%2Fexample.com%2Ffeed', 'should_have_reader_link' => true, ), - 'active following without feed ID' => array( + 'active following with feed ID' => array( 'item' => array( 'id' => 123, 'status' => 'active', 'identifier' => 'https://example.com/feed', ), - 'feed_id' => false, - 'expected_url' => 'https://wordpress.com/reader/feeds/lookup/https%3A%2F%2Fexample.com%2Ffeed', + 'feed_id' => 456, + 'expected_url' => 'https://wordpress.com/reader/feeds/456', 'should_have_reader_link' => true, ), 'pending following should not have reader link' => array( @@ -323,8 +321,6 @@ public function reader_link_data() { * * @dataProvider reader_link_data * @covers ::add_reader_link - * @runInSeparateProcess - * @preserveGlobalState disabled * * @param array $item The following item. * @param int|false $feed_id The feed ID or false. @@ -375,64 +371,4 @@ function ( $value, $object_id, $meta_key ) use ( $item, $feed_id ) { // Clean up filters. remove_all_filters( 'get_post_metadata' ); } - - /** - * Test pre_option_activitypub_following_ui method forces UI to be enabled. - * - * @covers ::pre_option_activitypub_following_ui - */ - public function test_pre_option_activitypub_following_ui() { - $result = Jetpack::pre_option_activitypub_following_ui(); - - $this->assertEquals( '1', $result ); - } - - /** - * Test integration with actual WordPress filters. - */ - public function test_filter_integration() { - // Initialize Jetpack integration. - Jetpack::init(); - - // Test sync meta filter integration (only if not on WordPress.com). - if ( ! defined( 'IS_WPCOM' ) ) { - $sync_meta = apply_filters( 'jetpack_sync_post_meta_whitelist', array() ); - $this->assertContains( Followers::FOLLOWER_META_KEY, $sync_meta ); - $this->assertContains( Following::FOLLOWING_META_KEY, $sync_meta ); - - // Test comment meta filter integration. - $comment_meta = apply_filters( 'jetpack_sync_comment_meta_whitelist', array() ); - $this->assertContains( 'avatar_url', $comment_meta ); - - // Test comment types filter integration. - $comment_types = apply_filters( 'jetpack_sync_whitelisted_comment_types', array() ); - $expected_ap_types = Comment::get_comment_type_slugs(); - foreach ( $expected_ap_types as $type ) { - $this->assertContains( $type, $comment_types ); - } - } else { - // On WordPress.com, sync filters should not be registered. - // Test that they are indeed not registered. - $sync_meta = apply_filters( 'jetpack_sync_post_meta_whitelist', array() ); - $this->assertNotContains( Followers::FOLLOWER_META_KEY, $sync_meta ); - $this->assertNotContains( Following::FOLLOWING_META_KEY, $sync_meta ); - - $comment_meta = apply_filters( 'jetpack_sync_comment_meta_whitelist', array() ); - $this->assertNotContains( 'avatar_url', $comment_meta ); - } - - // Test following UI filter integration - test direct method calls. - $ui_result = Jetpack::pre_option_activitypub_following_ui(); - $this->assertEquals( '1', $ui_result ); - - // Test reader link method directly. - $test_item = array( - 'id' => 123, - 'status' => 'active', - 'identifier' => 'https://example.com/feed', - ); - $original_actions = array( 'edit' => 'Edit' ); - $updated_actions = Jetpack::add_reader_link( $original_actions, $test_item ); - $this->assertArrayHasKey( 'reader', $updated_actions ); - } } From 7a69aa8a1c9bc05d7b2f9f8083fdcfa83fd21286 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle Date: Fri, 3 Oct 2025 13:08:36 +0200 Subject: [PATCH 48/52] Update builds (again) (#2285) --- build/editor-plugin/plugin.asset.php | 2 +- build/editor-plugin/plugin.js | 2 +- build/follow-me/index.asset.php | 2 +- build/follow-me/index.js | 4 +- build/follow-me/view.asset.php | 2 +- build/follow-me/view.js | 2 +- build/followers/index.asset.php | 2 +- build/followers/index.js | 4 +- build/followers/view.asset.php | 2 +- build/followers/view.js | 2 +- build/reactions/index.asset.php | 2 +- build/reactions/index.js | 6 +- build/reactions/view.asset.php | 2 +- build/reactions/view.js | 2 +- build/remote-reply/view.asset.php | 2 +- build/remote-reply/view.js | 2 +- build/reply-intent/plugin.asset.php | 2 +- build/reply-intent/plugin.js | 2 +- package-lock.json | 5085 ++++++++++++++++++-------- 19 files changed, 3538 insertions(+), 1591 deletions(-) diff --git a/build/editor-plugin/plugin.asset.php b/build/editor-plugin/plugin.asset.php index b7be0abdf..fe4d6a1f6 100644 --- a/build/editor-plugin/plugin.asset.php +++ b/build/editor-plugin/plugin.asset.php @@ -1 +1 @@ - array('react-jsx-runtime', 'wp-components', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => 'faa910495b60327c9360'); + array('react-jsx-runtime', 'wp-components', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '3331b1701416b9746825'); diff --git a/build/editor-plugin/plugin.js b/build/editor-plugin/plugin.js index 1c17b3b4c..5bd5b7d33 100644 --- a/build/editor-plugin/plugin.js +++ b/build/editor-plugin/plugin.js @@ -1 +1 @@ -(()=>{"use strict";const t=window.wp.editor,e=window.wp.editPost,i=window.wp.plugins,n=window.wp.components,a=window.wp.element,o=(0,a.forwardRef)((({icon:t,size:e=24,...i},n)=>(0,a.cloneElement)(t,{width:e,height:e,...i,ref:n}))),l=window.wp.primitives,c=window.ReactJSXRuntime,s=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),u=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),r=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),p=window.wp.data,v=window.wp.coreData,w=window.wp.url,_=window.wp.i18n;(0,i.registerPlugin)("activitypub-editor-plugin",{render:()=>{const i=(0,p.useSelect)((e=>e(t.store).getCurrentPostType()),[]),[a,r]=(0,v.useEntityProp)("postType",i,"meta");if("wp_block"===i)return null;const w=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5A6.5 6.5 0 0 1 6.93 7.931l9.139 9.138A6.473 6.473 0 0 1 12 18.5Zm5.123-2.498a6.5 6.5 0 0 0-9.124-9.124l9.124 9.124ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Z"})}),h={verticalAlign:"middle",gap:"4px",justifyContent:"start",display:"inline-flex",alignItems:"center"},b=(t,e,i)=>(0,c.jsx)(n.Tooltip,{text:i,children:(0,c.jsxs)(n.__experimentalText,{style:h,children:[(0,c.jsx)(o,{icon:t}),e]})}),d=t.PluginDocumentSettingPanel||e.PluginDocumentSettingPanel;return(0,c.jsxs)(d,{name:"activitypub",className:"block-editor-block-inspector",title:(0,_.__)("Fediverse ⁂","activitypub"),children:[(0,c.jsx)(n.TextControl,{label:(0,_.__)("Content Warning","activitypub"),value:a?.activitypub_content_warning,onChange:t=>{r({...a,activitypub_content_warning:t})},placeholder:(0,_.__)("Optional content warning","activitypub"),help:(0,_.__)("Content warnings do not change the content on your site, only in the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RangeControl,{label:(0,_.__)("Maximum Image Attachments","activitypub"),value:a?.activitypub_max_image_attachments,onChange:t=>{r({...a,activitypub_max_image_attachments:t})},min:0,max:10,help:(0,_.__)("Maximum number of image attachments to include when sharing to the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RadioControl,{label:(0,_.__)("Visibility","activitypub"),help:(0,_.__)("This adjusts the visibility of a post in the fediverse, but note that it won't affect how the post appears on the blog.","activitypub"),selected:a?.activitypub_content_visibility||"public",options:[{label:b(s,(0,_.__)("Public","activitypub"),(0,_.__)("Post will be visible to everyone and appear in public timelines.","activitypub")),value:"public"},{label:b(u,(0,_.__)("Quiet public","activitypub"),(0,_.__)("Post will be visible to everyone but will not appear in public timelines.","activitypub")),value:"quiet_public"},{label:b(w,(0,_.__)("Do not federate","activitypub"),(0,_.__)("Post will not be shared to the Fediverse.","activitypub")),value:"local"}],onChange:t=>{r({...a,activitypub_content_visibility:t})},className:"activitypub-visibility"}),(0,c.jsx)(n.SelectControl,{label:(0,_.__)("Who can quote this post?","activitypub"),help:(0,_.__)("Quoting allows others to reshare your post while adding their own commentary.","activitypub"),value:a?.activitypub_interaction_policy_quote,options:[{label:(0,_.__)("Anyone","activitypub"),value:"anyone"},{label:(0,_.__)("Followers only","activitypub"),value:"followers"},{label:(0,_.__)("Just me","activitypub"),value:"me"}],onChange:t=>{r({...a,activitypub_interaction_policy_quote:t})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})}}),(0,i.registerPlugin)("activitypub-editor-preview",{render:()=>{const e=(0,p.useSelect)((e=>e(t.store).getCurrentPost().status),[]);return(0,c.jsx)(c.Fragment,{children:t.PluginPreviewMenuItem?(0,c.jsx)(t.PluginPreviewMenuItem,{onClick:()=>{const e=(0,p.select)(t.store).getEditedPostPreviewLink(),i=(0,w.addQueryArgs)(e,{activitypub:"true"});window.open(i,"_blank")},icon:r,disabled:"auto-draft"===e,children:(0,_.__)("Fediverse preview ⁂","activitypub")}):null})}})})(); \ No newline at end of file +(()=>{"use strict";const t=window.wp.editor,e=window.wp.editPost,i=window.wp.plugins,n=window.wp.components,a=window.wp.element,o=(0,a.forwardRef)(({icon:t,size:e=24,...i},n)=>(0,a.cloneElement)(t,{width:e,height:e,...i,ref:n})),l=window.wp.primitives,c=window.ReactJSXRuntime,s=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),u=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),r=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),p=window.wp.data,v=window.wp.coreData,w=window.wp.url,_=window.wp.i18n;(0,i.registerPlugin)("activitypub-editor-plugin",{render:()=>{const i=(0,p.useSelect)(e=>e(t.store).getCurrentPostType(),[]),[a,r]=(0,v.useEntityProp)("postType",i,"meta");if("wp_block"===i)return null;const w=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5A6.5 6.5 0 0 1 6.93 7.931l9.139 9.138A6.473 6.473 0 0 1 12 18.5Zm5.123-2.498a6.5 6.5 0 0 0-9.124-9.124l9.124 9.124ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Z"})}),h={verticalAlign:"middle",gap:"4px",justifyContent:"start",display:"inline-flex",alignItems:"center"},b=(t,e,i)=>(0,c.jsx)(n.Tooltip,{text:i,children:(0,c.jsxs)(n.__experimentalText,{style:h,children:[(0,c.jsx)(o,{icon:t}),e]})}),d=t.PluginDocumentSettingPanel||e.PluginDocumentSettingPanel;return(0,c.jsxs)(d,{name:"activitypub",className:"block-editor-block-inspector",title:(0,_.__)("Fediverse ⁂","activitypub"),children:[(0,c.jsx)(n.TextControl,{label:(0,_.__)("Content Warning","activitypub"),value:a?.activitypub_content_warning,onChange:t=>{r({...a,activitypub_content_warning:t})},placeholder:(0,_.__)("Optional content warning","activitypub"),help:(0,_.__)("Content warnings do not change the content on your site, only in the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RangeControl,{label:(0,_.__)("Maximum Image Attachments","activitypub"),value:a?.activitypub_max_image_attachments,onChange:t=>{r({...a,activitypub_max_image_attachments:t})},min:0,max:10,help:(0,_.__)("Maximum number of image attachments to include when sharing to the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RadioControl,{label:(0,_.__)("Visibility","activitypub"),help:(0,_.__)("This adjusts the visibility of a post in the fediverse, but note that it won't affect how the post appears on the blog.","activitypub"),selected:a?.activitypub_content_visibility||"public",options:[{label:b(s,(0,_.__)("Public","activitypub"),(0,_.__)("Post will be visible to everyone and appear in public timelines.","activitypub")),value:"public"},{label:b(u,(0,_.__)("Quiet public","activitypub"),(0,_.__)("Post will be visible to everyone but will not appear in public timelines.","activitypub")),value:"quiet_public"},{label:b(w,(0,_.__)("Do not federate","activitypub"),(0,_.__)("Post will not be shared to the Fediverse.","activitypub")),value:"local"}],onChange:t=>{r({...a,activitypub_content_visibility:t})},className:"activitypub-visibility"}),(0,c.jsx)(n.SelectControl,{label:(0,_.__)("Who can quote this post?","activitypub"),help:(0,_.__)("Quoting allows others to reshare your post while adding their own commentary.","activitypub"),value:a?.activitypub_interaction_policy_quote,options:[{label:(0,_.__)("Anyone","activitypub"),value:"anyone"},{label:(0,_.__)("Followers only","activitypub"),value:"followers"},{label:(0,_.__)("Just me","activitypub"),value:"me"}],onChange:t=>{r({...a,activitypub_interaction_policy_quote:t})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})}}),(0,i.registerPlugin)("activitypub-editor-preview",{render:()=>{const e=(0,p.useSelect)(e=>e(t.store).getCurrentPost().status,[]);return(0,c.jsx)(c.Fragment,{children:t.PluginPreviewMenuItem?(0,c.jsx)(t.PluginPreviewMenuItem,{onClick:()=>{const e=(0,p.select)(t.store).getEditedPostPreviewLink(),i=(0,w.addQueryArgs)(e,{activitypub:"true"});window.open(i,"_blank")},icon:r,disabled:"auto-draft"===e,children:(0,_.__)("Fediverse preview ⁂","activitypub")}):null})}})})(); \ No newline at end of file diff --git a/build/follow-me/index.asset.php b/build/follow-me/index.asset.php index 44384affa..3772d7c87 100644 --- a/build/follow-me/index.asset.php +++ b/build/follow-me/index.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '637aaea1bc267cd129b8'); + array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '4bc33435d56fb0a864a4'); diff --git a/build/follow-me/index.js b/build/follow-me/index.js index 466fd081d..f1643f19d 100644 --- a/build/follow-me/index.js +++ b/build/follow-me/index.js @@ -1,2 +1,2 @@ -(()=>{var e,t={20:(e,t,r)=>{"use strict";var o=r(609),n=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),s=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,r){var o,i={},c=null,u=null;for(o in void 0!==r&&(c=""+r),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,o)&&!l.hasOwnProperty(o)&&(i[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps)void 0===i[o]&&(i[o]=t[o]);return{$$typeof:n,type:e,key:c,ref:u,props:i,_owner:s.current}}},609:e=>{"use strict";e.exports=window.React},612:(e,t,r)=>{"use strict";const o=window.wp.blocks,n=window.wp.primitives;var a=r(848);const s=(0,a.jsx)(n.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,a.jsx)(n.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})});var l=r(609),i=r(942),c=r.n(i);const u=window.wp.blockEditor,p=window.wp.i18n,d={html:!1,color:{gradients:!0,link:!0,__experimentalDefaultControls:{background:!0,text:!0,link:!0}},__experimentalBorder:{radius:!0,width:!0,color:!0,style:!0},typography:{fontSize:!0,__experimentalDefaultControls:{fontSize:!0}}},f=d;function v({buttonOnly:e=!1,className:t="",...r}){return r.className=c()(t,e?"is-style-button-only":"is-style-default"),r}const b={attributes:{buttonOnly:{type:"boolean",default:!1},buttonText:{type:"string",default:"Follow"},selectedUser:{type:"string",default:"blog"}},supports:d,isEligible:({buttonText:e,buttonOnly:t})=>!!e||!!t,migrate({buttonText:e,...t}){const r=(0,o.createBlock)("core/button",{text:e});return[v(t),[r]]}},m={attributes:{selectedUser:{type:"string",default:"blog"},buttonOnly:{type:"boolean",default:!1}},supports:f,isEligible:({buttonOnly:e})=>!!e,migrate:v,save(){const e=u.useBlockProps.save(),t=u.useInnerBlocksProps.save(e);return(0,l.createElement)("div",{...t})}},y=[{attributes:{selectedUser:{type:"string",default:"blog"}},supports:f,isEligible:(e,t)=>1===t.length&&"button"===t[0].attributes.tagName,migrate(e,t){var r;const{tagName:n,...a}=t[0].attributes,s=null!==(r=t[0].originalContent.replace(/<[^>]*>/g,""))&&void 0!==r?r:(0,p.__)("Follow","activitypub");return[e,[(0,o.createBlock)("core/button",{...a,text:s})]]},save(){const e=u.useBlockProps.save(),t=u.useInnerBlocksProps.save(e);return(0,l.createElement)("div",{...t})}},m,b],w=window.wp.apiFetch;var h=r.n(w);const g=window.wp.data,_=window.wp.coreData,E=window.wp.components,k=window.wp.element;function x(){return window._activityPubOptions||{}}function O({name:e}){const{enabled:t}=x(),r=t?.blog?"":(0,p.__)("It will be empty in other non-author contexts.","activitypub"),o=(0,p.sprintf)(/* translators: %1$s: block name, %2$s: extra information for non-author context */ /* translators: %1$s: block name, %2$s: extra information for non-author context */ -(0,p.__)("This %1$s block will adapt to the page it is on, displaying the user profile associated with a post author (in a loop) or a user archive. %2$s","activitypub"),e,r).trim();return(0,l.createElement)(E.Card,null,(0,l.createElement)(E.CardBody,null,(0,k.createInterpolateElement)(o,{strong:(0,l.createElement)("strong",null)})))}const S={avatar:"https://secure.gravatar.com/avatar/default?s=120",webfinger:"@well@hello.dolly",name:(0,p.__)("Hello Dolly Fan Account","activitypub"),url:"#",image:{url:""},summary:""};function B(e){if(!e)return S;const t={...S,...e};return t.avatar=t?.icon?.url,t.webfinger&&!t.webfinger.startsWith("@")&&(t.webfinger="@"+t.webfinger),t}function N({profile:e,className:t,innerBlocksProps:r}){const{webfinger:o,avatar:n,name:a,image:s,summary:i,followersCount:c,postsCount:u}=e,d=t&&t.includes("is-style-button-only"),f={posts:u||0,followers:c||0};return(0,l.createElement)("div",{className:"activitypub-profile"},!d&&s?.url&&(0,l.createElement)("div",{className:"activitypub-profile__header",style:{backgroundImage:`url(${s.url})`}}),(0,l.createElement)("div",{className:"activitypub-profile__body"},!d&&(0,l.createElement)("img",{className:"activitypub-profile__avatar",src:n,alt:a}),(0,l.createElement)("div",{className:"activitypub-profile__content"},!d&&(0,l.createElement)("div",{className:"activitypub-profile__info"},(0,l.createElement)("div",{className:"activitypub-profile__name"},a),(0,l.createElement)("div",{className:"activitypub-profile__handle"},o)),(0,l.createElement)("div",{...r}),!d&&(0,l.createElement)("div",{className:"activitypub-profile__bio",dangerouslySetInnerHTML:{__html:i}}),!d&&(0,l.createElement)("div",{className:"activitypub-profile__stats"},Object.entries(f).map((([e,t])=>(0,l.createElement)("div",{key:e},(0,l.createElement)("strong",null,t)," ","posts"===e?(0,p._n)("post","posts",t,"activitypub"):"followers"===e?(0,p._n)("follower","followers",t,"activitypub"):(0,p._n)("following","following",t,"activitypub"))))))))}const P=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","name":"activitypub/follow-me","apiVersion":3,"version":"2.2.0","title":"Follow me on the Fediverse","category":"widgets","description":"Display your Fediverse profile so that visitors can follow you.","textdomain":"activitypub","icon":"groups","example":{"attributes":{"className":"is-style-default"}},"supports":{"html":false,"interactivity":true,"color":{"gradients":true,"link":true,"__experimentalDefaultControls":{"background":true,"text":true,"link":true}},"__experimentalBorder":{"radius":true,"width":true,"color":true,"style":true},"shadow":true,"typography":{"fontSize":true,"__experimentalDefaultControls":{"fontSize":true}},"innerBlocks":{"allowedBlocks":["core/button"]}},"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"button-only","label":"Button"},{"name":"profile","label":"Profile"}],"attributes":{"selectedUser":{"type":"string","default":"blog"}},"usesContext":["postType","postId"],"editorScript":"file:./index.js","viewScriptModule":"file:./view.js","viewScript":"wp-api-fetch","style":"file:./style-index.css","render":"file:./render.php"}');(0,o.registerBlockType)(P,{deprecated:y,edit:function({attributes:e,setAttributes:t,context:{postType:r,postId:o}}){const n=(0,u.useBlockProps)({className:"activitypub-follow-me-block-wrapper"}),a=function({withInherit:e=!1}){const{enabled:t,namespace:r}=x(),[o,n]=(0,k.useState)(!1),{fetchedUsers:a,isLoadingUsers:s}=(0,g.useSelect)((e=>{const{getUsers:r,getIsResolving:o}=e("core");return{fetchedUsers:t?.users?r({capabilities:"activitypub"}):null,isLoadingUsers:!!t?.users&&o("getUsers",[{capabilities:"activitypub"}])}}),[]),l=(0,g.useSelect)((e=>a||s?null:e("core").getCurrentUser()),[a,s]);(0,k.useEffect)((()=>{a||s||!l||h()({path:`/${r}/actors/${l.id}`,method:"HEAD",headers:{Accept:"application/activity+json"},parse:!1}).then((()=>n(!0))).catch((()=>n(!1)))}),[a,s,l]);const i=a||(l&&o?[{id:l.id,name:l.name}]:[]);return(0,k.useMemo)((()=>{if(!i.length)return[];const r=[];return t?.blog&&a&&r.push({label:(0,p.__)("Blog","activitypub"),value:"blog"}),e&&t?.users&&a&&r.push({label:(0,p.__)("Dynamic User","activitypub"),value:"inherit"}),i.reduce(((e,t)=>(e.push({label:t.name,value:`${t.id}`}),e)),r)}),[i])}({withInherit:!0}),{selectedUser:s,className:i="is-style-default"}=e,c="inherit"===s,[d,f]=(0,k.useState)(B(S)),v="blog"===s?0:s,b=[["core/button",{text:(0,p.__)("Follow","activitypub")}]],m=(0,u.useInnerBlocksProps)({},{allowedBlocks:["core/button"],template:b,templateLock:!1,renderAppender:!1}),y=(0,g.useSelect)((e=>{const{getEditedEntityRecord:t}=e(_.store),n=t("postType",r,o)?.author;return null!=n?n:null}),[r,o]);return(0,k.useEffect)((()=>{if(c&&!y)return;const e=c?y:v;(function(e){const{namespace:t}=x(),r={headers:{Accept:"application/activity+json"},path:`/${t}/actors/${e}`};return h()(r)})(e).then((t=>{if(f(B(t)),t.followers)try{const{pathname:e}=new URL(t.followers);h()({path:e.replace("wp-json/","")}).then((({totalItems:e=0})=>{f((t=>({...t,followersCount:e})))})).catch((()=>{}))}catch(e){}e?h()({path:`/wp/v2/users/${e}/?context=activitypub`}).then((({post_count:e})=>{f((t=>({...t,postsCount:e})))})).catch((()=>{})):h()({path:"/wp/v2/posts",method:"HEAD",parse:!1}).then((e=>{const t=e.headers.get("X-WP-Total");f((e=>({...e,postsCount:t})))})).catch((()=>{}))})).catch((()=>{}))}),[v,y,c]),(0,k.useEffect)((()=>{a.length&&(a.find((({value:e})=>e===s))||t({selectedUser:a[0].value}))}),[s,a]),(0,l.createElement)("div",{...n},(0,l.createElement)(u.InspectorControls,{key:"activitypub-follow-me"},a.length>1&&(0,l.createElement)(E.PanelBody,{title:(0,p.__)("Follow Me Options","activitypub")},(0,l.createElement)(E.SelectControl,{label:(0,p.__)("Select User","activitypub"),value:e.selectedUser,options:a,onChange:e=>t({selectedUser:e}),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))),c&&!y?(0,l.createElement)(O,{name:(0,p.__)("Follow Me","activitypub")}):(0,l.createElement)(N,{profile:d,className:i,innerBlocksProps:m}))},icon:s,save:function(){const e=u.useBlockProps.save(),t=u.useInnerBlocksProps.save(e);return(0,l.createElement)("div",{...t})}})},848:(e,t,r)=>{"use strict";e.exports=r(20)},942:(e,t)=>{var r;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e="",t=0;t{if(!r){var s=1/0;for(u=0;u=a)&&Object.keys(o.O).every((e=>o.O[e](r[i])))?r.splice(i--,1):(l=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,n,a]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={338:0,870:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[s,l,i]=r,c=0;if(s.some((t=>0!==e[t]))){for(n in l)o.o(l,n)&&(o.m[n]=l[n]);if(i)var u=i(o)}for(t&&t(r);co(612)));n=o.O(n)})(); \ No newline at end of file +(()=>{var e,t={768:(e,t,r)=>{"use strict";const o=window.wp.blocks,s=window.wp.primitives,i=window.ReactJSXRuntime,n=(0,i.jsx)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,i.jsx)(s.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})});var a=r(942),l=r.n(a);const c=window.wp.blockEditor,u=window.wp.i18n,p={html:!1,color:{gradients:!0,link:!0,__experimentalDefaultControls:{background:!0,text:!0,link:!0}},__experimentalBorder:{radius:!0,width:!0,color:!0,style:!0},typography:{fontSize:!0,__experimentalDefaultControls:{fontSize:!0}}},d=p;function v({buttonOnly:e=!1,className:t="",...r}){return r.className=l()(t,e?"is-style-button-only":"is-style-default"),r}const f={attributes:{buttonOnly:{type:"boolean",default:!1},buttonText:{type:"string",default:"Follow"},selectedUser:{type:"string",default:"blog"}},supports:p,isEligible:({buttonText:e,buttonOnly:t})=>!!e||!!t,migrate({buttonText:e,...t}){const r=(0,o.createBlock)("core/button",{text:e});return[v(t),[r]]}},b={attributes:{selectedUser:{type:"string",default:"blog"},buttonOnly:{type:"boolean",default:!1}},supports:d,isEligible:({buttonOnly:e})=>!!e,migrate:v,save(){const e=c.useBlockProps.save(),t=c.useInnerBlocksProps.save(e);return(0,i.jsx)("div",{...t})}},h=[{attributes:{selectedUser:{type:"string",default:"blog"}},supports:d,isEligible:(e,t)=>1===t.length&&"button"===t[0].attributes.tagName,migrate(e,t){var r;const{tagName:s,...i}=t[0].attributes,n=null!==(r=t[0].originalContent.replace(/<[^>]*>/g,""))&&void 0!==r?r:(0,u.__)("Follow","activitypub");return[e,[(0,o.createBlock)("core/button",{...i,text:n})]]},save(){const e=c.useBlockProps.save(),t=c.useInnerBlocksProps.save(e);return(0,i.jsx)("div",{...t})}},b,f],y=window.wp.apiFetch;var w=r.n(y);const m=window.wp.data,g=window.wp.coreData,_=window.wp.components,x=window.wp.element;function j(){return window._activityPubOptions||{}}function k({name:e}){const{enabled:t}=j(),r=t?.blog?"":(0,u.__)("It will be empty in other non-author contexts.","activitypub"),o=(0,u.sprintf)(/* translators: %1$s: block name, %2$s: extra information for non-author context */ /* translators: %1$s: block name, %2$s: extra information for non-author context */ +(0,u.__)("This %1$s block will adapt to the page it is on, displaying the user profile associated with a post author (in a loop) or a user archive. %2$s","activitypub"),e,r).trim();return(0,i.jsx)(_.Card,{children:(0,i.jsx)(_.CardBody,{children:(0,x.createInterpolateElement)(o,{strong:(0,i.jsx)("strong",{})})})})}const B={avatar:"https://secure.gravatar.com/avatar/default?s=120",webfinger:"@well@hello.dolly",name:(0,u.__)("Hello Dolly Fan Account","activitypub"),url:"#",image:{url:""},summary:""};function S(e){if(!e)return B;const t={...B,...e};return t.avatar=t?.icon?.url,t.webfinger&&!t.webfinger.startsWith("@")&&(t.webfinger="@"+t.webfinger),t}function O({profile:e,className:t,innerBlocksProps:r}){const{webfinger:o,avatar:s,name:n,image:a,summary:l,followersCount:c,postsCount:p}=e,d=t&&t.includes("is-style-button-only"),v={posts:p||0,followers:c||0};return(0,i.jsxs)("div",{className:"activitypub-profile",children:[!d&&a?.url&&(0,i.jsx)("div",{className:"activitypub-profile__header",style:{backgroundImage:`url(${a.url})`}}),(0,i.jsxs)("div",{className:"activitypub-profile__body",children:[!d&&(0,i.jsx)("img",{className:"activitypub-profile__avatar",src:s,alt:n}),(0,i.jsxs)("div",{className:"activitypub-profile__content",children:[!d&&(0,i.jsxs)("div",{className:"activitypub-profile__info",children:[(0,i.jsx)("div",{className:"activitypub-profile__name",children:n}),(0,i.jsx)("div",{className:"activitypub-profile__handle",children:o})]}),(0,i.jsx)("div",{...r}),!d&&(0,i.jsx)("div",{className:"activitypub-profile__bio",dangerouslySetInnerHTML:{__html:l}}),!d&&(0,i.jsx)("div",{className:"activitypub-profile__stats",children:Object.entries(v).map(([e,t])=>(0,i.jsxs)("div",{children:[(0,i.jsx)("strong",{children:t})," ","posts"===e?(0,u._n)("post","posts",t,"activitypub"):"followers"===e?(0,u._n)("follower","followers",t,"activitypub"):(0,u._n)("following","following",t,"activitypub")]},e))})]})]})]})}const N=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","name":"activitypub/follow-me","apiVersion":3,"version":"2.2.0","title":"Follow me on the Fediverse","category":"widgets","description":"Display your Fediverse profile so that visitors can follow you.","textdomain":"activitypub","icon":"groups","example":{"attributes":{"className":"is-style-default"}},"supports":{"html":false,"interactivity":true,"color":{"gradients":true,"link":true,"__experimentalDefaultControls":{"background":true,"text":true,"link":true}},"__experimentalBorder":{"radius":true,"width":true,"color":true,"style":true},"shadow":true,"typography":{"fontSize":true,"__experimentalDefaultControls":{"fontSize":true}},"innerBlocks":{"allowedBlocks":["core/button"]}},"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"button-only","label":"Button"},{"name":"profile","label":"Profile"}],"attributes":{"selectedUser":{"type":"string","default":"blog"}},"usesContext":["postType","postId"],"editorScript":"file:./index.js","viewScriptModule":"file:./view.js","viewScript":"wp-api-fetch","style":"file:./style-index.css","render":"file:./render.php"}');(0,o.registerBlockType)(N,{deprecated:h,edit:function({attributes:e,setAttributes:t,context:{postType:r,postId:o}}){const s=(0,c.useBlockProps)({className:"activitypub-follow-me-block-wrapper"}),n=function({withInherit:e=!1}){const{enabled:t,namespace:r}=j(),[o,s]=(0,x.useState)(!1),{fetchedUsers:i,isLoadingUsers:n}=(0,m.useSelect)(e=>{const{getUsers:r,getIsResolving:o}=e("core");return{fetchedUsers:t?.users?r({capabilities:"activitypub"}):null,isLoadingUsers:!!t?.users&&o("getUsers",[{capabilities:"activitypub"}])}},[]),a=(0,m.useSelect)(e=>i||n?null:e("core").getCurrentUser(),[i,n]);(0,x.useEffect)(()=>{i||n||!a||w()({path:`/${r}/actors/${a.id}`,method:"HEAD",headers:{Accept:"application/activity+json"},parse:!1}).then(()=>s(!0)).catch(()=>s(!1))},[i,n,a]);const l=i||(a&&o?[{id:a.id,name:a.name}]:[]);return(0,x.useMemo)(()=>{if(!l.length)return[];const r=[];return t?.blog&&i&&r.push({label:(0,u.__)("Blog","activitypub"),value:"blog"}),e&&t?.users&&i&&r.push({label:(0,u.__)("Dynamic User","activitypub"),value:"inherit"}),l.reduce((e,t)=>(e.push({label:t.name,value:`${t.id}`}),e),r)},[l])}({withInherit:!0}),{selectedUser:a,className:l="is-style-default"}=e,p="inherit"===a,[d,v]=(0,x.useState)(S(B)),f="blog"===a?0:a,b=[["core/button",{text:(0,u.__)("Follow","activitypub")}]],h=(0,c.useInnerBlocksProps)({},{allowedBlocks:["core/button"],template:b,templateLock:!1,renderAppender:!1}),y=(0,m.useSelect)(e=>{const{getEditedEntityRecord:t}=e(g.store),s=t("postType",r,o)?.author;return null!=s?s:null},[r,o]);return(0,x.useEffect)(()=>{if(p&&!y)return;const e=p?y:f;(function(e){const{namespace:t}=j(),r={headers:{Accept:"application/activity+json"},path:`/${t}/actors/${e}`};return w()(r)})(e).then(t=>{if(v(S(t)),t.followers)try{const{pathname:e}=new URL(t.followers);w()({path:e.replace("wp-json/","")}).then(({totalItems:e=0})=>{v(t=>({...t,followersCount:e}))}).catch(()=>{})}catch(e){}e?w()({path:`/wp/v2/users/${e}/?context=activitypub`}).then(({post_count:e})=>{v(t=>({...t,postsCount:e}))}).catch(()=>{}):w()({path:"/wp/v2/posts",method:"HEAD",parse:!1}).then(e=>{const t=e.headers.get("X-WP-Total");v(e=>({...e,postsCount:t}))}).catch(()=>{})}).catch(()=>{})},[f,y,p]),(0,x.useEffect)(()=>{n.length&&(n.find(({value:e})=>e===a)||t({selectedUser:n[0].value}))},[a,n]),(0,i.jsxs)("div",{...s,children:[(0,i.jsx)(c.InspectorControls,{children:n.length>1&&(0,i.jsx)(_.PanelBody,{title:(0,u.__)("Follow Me Options","activitypub"),children:(0,i.jsx)(_.SelectControl,{label:(0,u.__)("Select User","activitypub"),value:e.selectedUser,options:n,onChange:e=>t({selectedUser:e}),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})})},"activitypub-follow-me"),p&&!y?(0,i.jsx)(k,{name:(0,u.__)("Follow Me","activitypub")}):(0,i.jsx)(O,{profile:d,className:l,innerBlocksProps:h})]})},icon:n,save:function(){const e=c.useBlockProps.save(),t=c.useInnerBlocksProps.save(e);return(0,i.jsx)("div",{...t})}})},942:(e,t)=>{var r;!function(){"use strict";var o={}.hasOwnProperty;function s(){for(var e="",t=0;t{if(!r){var n=1/0;for(u=0;u=i)&&Object.keys(o.O).every(e=>o.O[e](r[l]))?r.splice(l--,1):(a=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[r,s,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={338:0,870:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var s,i,[n,a,l]=r,c=0;if(n.some(t=>0!==e[t])){for(s in a)o.o(a,s)&&(o.m[s]=a[s]);if(l)var u=l(o)}for(t&&t(r);co(768));s=o.O(s)})(); \ No newline at end of file diff --git a/build/follow-me/view.asset.php b/build/follow-me/view.asset.php index 2a97e998c..3af44537e 100644 --- a/build/follow-me/view.asset.php +++ b/build/follow-me/view.asset.php @@ -1 +1 @@ - array('@wordpress/interactivity'), 'version' => '74866c35caac5982b6c6', 'type' => 'module'); + array('@wordpress/interactivity'), 'version' => 'dcfaf459c212f2047ad9', 'type' => 'module'); diff --git a/build/follow-me/view.js b/build/follow-me/view.js index 4766b19b6..d30475380 100644 --- a/build/follow-me/view.js +++ b/build/follow-me/view.js @@ -1 +1 @@ -import*as t from"@wordpress/interactivity";var e={d:(t,o)=>{for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const o=(r={getConfig:()=>t.getConfig,getContext:()=>t.getContext,getElement:()=>t.getElement,store:()=>t.store},l={},e.d(l,r),l),n={computedStyles:null,variables:{}};var r,l;function c(t){if("undefined"==typeof window||!window.getComputedStyle)return!1;if(n.variables.hasOwnProperty(t))return n.variables[t];n.computedStyles||(n.computedStyles=window.getComputedStyle(document.documentElement));const e=n.computedStyles.getPropertyValue(t).trim();return n.variables[t]=""!==e,n.variables[t]}function i(t){if("string"!=typeof t)return null;if(t.match(/^#/))return t.substring(0,7);const[,,e]=t.split("|"),o=`--wp--preset--color--${e}`;return c(o)?`var(${o})`:null}function a(t,e,o=null,n=""){return o?`${t}${n} { ${e}: ${o}; }\n`:""}function s(t,e,o,n){return a(t,"background-color",e)+a(t,"color",o)+a(t,"background-color",n,":hover")+a(t,"background-color",n,":focus")}const{apiFetch:d}=window.wp;!function(){const{actions:t,callbacks:e}=(0,o.store)("activitypub/follow-me",{actions:{openModal(t){const n=(0,o.getContext)();n.modal.isOpen=!0,n.modal.isCompact?setTimeout(e.positionModal,0):setTimeout((()=>{const t=document.getElementById(n.blockId);if(t){const o=t.querySelector(".activitypub-modal__frame");o&&e.trapFocus(o)}}),50),"function"==typeof e.onModalOpen&&e.onModalOpen(t)},closeModal(t){const n=(0,o.getContext)();n.modal.isOpen=!1;const r=(0,o.getElement)();if("actions.toggleModal"===r.ref.dataset["wpOn-Click"])r.ref.focus();else{const t=document.getElementById(n.blockId);if(t){const e=t.querySelector('[data-wp-on--click="actions.toggleModal"], [data-wp-on-async--click="actions.toggleModal"]');e&&e.focus()}}"function"==typeof e.onModalClose&&e.onModalClose(t)},toggleModal(e){const{modal:n}=(0,o.getContext)();n.isOpen?t.closeModal(e):t.openModal(e)}},callbacks:{_abortController:null,handleModalEffects(){const{modal:t}=(0,o.getContext)();if(t.isOpen&&!t.isCompact?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),e._abortController&&(e._abortController.abort(),e._abortController=null),t.isOpen){e._abortController=new AbortController;const{signal:t}=e._abortController;document.addEventListener("keydown",e.documentKeydown,{signal:t}),document.addEventListener("click",e.documentClick,{signal:t})}},documentKeydown(e){const{modal:n}=(0,o.getContext)();n.isOpen&&"Escape"===e.key&&t.closeModal()},documentClick(e){const{blockId:n,modal:r}=(0,o.getContext)();if(!r.isOpen)return;const l=document.getElementById(n);if(!l)return;const c=l.querySelector('.wp-element-button[data-wp-on--click="actions.toggleModal"]');if(c&&(c===e.target||c.contains(e.target)))return;const i=l.querySelector(".activitypub-modal__frame");i&&!i.contains(e.target)&&t.closeModal()},positionModal(){const{blockId:t}=(0,o.getContext)(),e=document.getElementById(t);if(!e)return;const n=e.querySelector(".activitypub-modal__overlay");if(!n)return;n.style.top="",n.style.left="",n.style.right="",n.style.bottom="";const r=(0,o.getElement)().ref.getBoundingClientRect(),l=window.innerWidth,c=e.getBoundingClientRect();let i={top:r.bottom-c.top+8+"px",left:r.left-c.left-2+"px"};l-r.right<250&&(i.left="auto",i.right=c.right-r.right+"px"),Object.assign(n.style,i)},trapFocus(t){const e=t.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]):not([readonly]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'),o=e[0],n=e[e.length-1];o&&o.classList.contains("activitypub-modal__close")&&e.length>1?e[1].focus():o.focus(),t.addEventListener("keydown",(function(t){"Tab"!==t.key&&9!==t.keyCode||(t.shiftKey?document.activeElement===o&&(n.focus(),t.preventDefault()):document.activeElement===n&&(o.focus(),t.preventDefault()))}))}}})}();const{actions:u,callbacks:p}=(0,o.store)("activitypub/follow-me",{actions:{copyToClipboard(){const t=(0,o.getContext)(),{i18n:e}=(0,o.getConfig)();navigator.clipboard.writeText(t.webfinger).then((()=>{t.copyButtonText=e.copied,setTimeout((()=>{t.copyButtonText=e.copy}),1e3)}),(t=>{console.error("Could not copy text: ",t)}))},updateRemoteProfile(t){const e=(0,o.getContext)();e.remoteProfile=t.target.value,e.isError=!1,e.errorMessage=""},onKeydown(t){"A"!==(0,o.getElement)().ref.tagName||"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),u.toggleModal(t))},handleKeyDown(t){"Enter"===t.key&&(t.preventDefault(),u.submitRemoteProfile())},submitRemoteProfile:function*(){const t=(0,o.getContext)(),{namespace:e,i18n:n}=(0,o.getConfig)(),r=t.remoteProfile.trim();if(!r)return t.isError=!0,void(t.errorMessage=n.emptyProfileError);if(!p.isHandle(r))return t.isError=!0,void(t.errorMessage=n.invalidProfileError);t.isLoading=!0,t.isError=!1;const l=`/${e}/actors/${t.userId}/remote-follow?resource=${encodeURIComponent(r)}`;try{const e=yield d({path:l});t.isLoading=!1,window.open(e.url,"_blank"),u.closeModal(new Event("click"))}catch(e){console.error("Error submitting profile:",e),t.isLoading=!1,t.isError=!0,t.errorMessage=e.message||n.genericError}}},callbacks:{initButtonStyles:()=>{const{buttonStyle:t,backgroundColor:e,blockId:n}=(0,o.getContext)();if(n&&t){const o=document.createElement("style"),l=`#${n}`;o.textContent=function(t,e,o){const n=`${t} .wp-block-button__link`,r=function(t){if("string"==typeof t){const e=`--wp--preset--color--${t}`;return c(e)?`var(${e})`:null}return t?.color?.background||null}(o)||e?.color?.background;return s(n,i(e?.elements?.link?.color?.text),r,i(e?.elements?.link?.[":hover"]?.color?.text))}(l,t,e),document.head.appendChild(o);const a=document.createElement("style");a.textContent=(r=t,s(".activitypub-dialog__button-group .wp-block-button",i(r?.elements?.link?.color?.text)||"#111","#fff",i(r?.elements?.link?.[":hover"]?.color?.text)||"#333")),document.head.appendChild(a)}var r},isHandle(t){const e=t.replace(/^@/,"").split("@");return 2===e.length&&p.isUrl(`https://${e[1]}`)},isUrl(t){try{return new URL(t),!0}catch(t){return!1}},onModalClose(){(0,o.getContext)().isError=!1}}}); \ No newline at end of file +import{getConfig as e,getContext as t,getElement as o,store as n}from"@wordpress/interactivity";const r={computedStyles:null,variables:{}};function l(e){if("undefined"==typeof window||!window.getComputedStyle)return!1;if(r.variables.hasOwnProperty(e))return r.variables[e];r.computedStyles||(r.computedStyles=window.getComputedStyle(document.documentElement));const t=r.computedStyles.getPropertyValue(e).trim();return r.variables[e]=""!==t,r.variables[e]}function c(e){if("string"!=typeof e)return null;if(e.match(/^#/))return e.substring(0,7);const[,,t]=e.split("|"),o=`--wp--preset--color--${t}`;return l(o)?`var(${o})`:null}function i(e,t,o=null,n=""){return o?`${e}${n} { ${t}: ${o}; }\n`:""}function s(e,t,o,n){return i(e,"background-color",t)+i(e,"color",o)+i(e,"background-color",n,":hover")+i(e,"background-color",n,":focus")}const{apiFetch:a}=window.wp;!function(){const{actions:e,callbacks:r}=n("activitypub/follow-me",{actions:{openModal(e){const o=t();o.modal.isOpen=!0,o.modal.isCompact?setTimeout(r.positionModal,0):setTimeout(()=>{const e=document.getElementById(o.blockId);if(e){const t=e.querySelector(".activitypub-modal__frame");t&&r.trapFocus(t)}},50),"function"==typeof r.onModalOpen&&r.onModalOpen(e)},closeModal(e){const n=t();n.modal.isOpen=!1;const l=o();if("actions.toggleModal"===l.ref.dataset["wpOn-Click"])l.ref.focus();else{const e=document.getElementById(n.blockId);if(e){const t=e.querySelector('[data-wp-on--click="actions.toggleModal"], [data-wp-on-async--click="actions.toggleModal"]');t&&t.focus()}}"function"==typeof r.onModalClose&&r.onModalClose(e)},toggleModal(o){const{modal:n}=t();n.isOpen?e.closeModal(o):e.openModal(o)}},callbacks:{_abortController:null,handleModalEffects(){const{modal:e}=t();if(e.isOpen&&!e.isCompact?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),r._abortController&&(r._abortController.abort(),r._abortController=null),e.isOpen){r._abortController=new AbortController;const{signal:e}=r._abortController;document.addEventListener("keydown",r.documentKeydown,{signal:e}),document.addEventListener("click",r.documentClick,{signal:e})}},documentKeydown(o){const{modal:n}=t();n.isOpen&&"Escape"===o.key&&e.closeModal()},documentClick(o){const{blockId:n,modal:r}=t();if(!r.isOpen)return;const l=document.getElementById(n);if(!l)return;const c=l.querySelector('.wp-element-button[data-wp-on--click="actions.toggleModal"]');if(c&&(c===o.target||c.contains(o.target)))return;const i=l.querySelector(".activitypub-modal__frame");i&&!i.contains(o.target)&&e.closeModal()},positionModal(){const{blockId:e}=t(),n=document.getElementById(e);if(!n)return;const r=n.querySelector(".activitypub-modal__overlay");if(!r)return;r.style.top="",r.style.left="",r.style.right="",r.style.bottom="";const l=o().ref.getBoundingClientRect(),c=window.innerWidth,i=n.getBoundingClientRect();let s={top:l.bottom-i.top+8+"px",left:l.left-i.left-2+"px"};c-l.right<250&&(s.left="auto",s.right=i.right-l.right+"px"),Object.assign(r.style,s)},trapFocus(e){const t=e.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]):not([readonly]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'),o=t[0],n=t[t.length-1];o&&o.classList.contains("activitypub-modal__close")&&t.length>1?t[1].focus():o.focus(),e.addEventListener("keydown",function(e){"Tab"!==e.key&&9!==e.keyCode||(e.shiftKey?document.activeElement===o&&(n.focus(),e.preventDefault()):document.activeElement===n&&(o.focus(),e.preventDefault()))})}}})}();const{actions:d,callbacks:u}=n("activitypub/follow-me",{actions:{copyToClipboard(){const o=t(),{i18n:n}=e();navigator.clipboard.writeText(o.webfinger).then(()=>{o.copyButtonText=n.copied,setTimeout(()=>{o.copyButtonText=n.copy},1e3)},e=>{console.error("Could not copy text: ",e)})},updateRemoteProfile(e){const o=t();o.remoteProfile=e.target.value,o.isError=!1,o.errorMessage=""},onKeydown(e){"A"!==o().ref.tagName||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),d.toggleModal(e))},handleKeyDown(e){"Enter"===e.key&&(e.preventDefault(),d.submitRemoteProfile())},submitRemoteProfile:function*(){const o=t(),{namespace:n,i18n:r}=e(),l=o.remoteProfile.trim();if(!l)return o.isError=!0,void(o.errorMessage=r.emptyProfileError);if(!u.isHandle(l))return o.isError=!0,void(o.errorMessage=r.invalidProfileError);o.isLoading=!0,o.isError=!1;const c=`/${n}/actors/${o.userId}/remote-follow?resource=${encodeURIComponent(l)}`;try{const e=yield a({path:c});o.isLoading=!1,window.open(e.url,"_blank"),d.closeModal(new Event("click"))}catch(e){console.error("Error submitting profile:",e),o.isLoading=!1,o.isError=!0,o.errorMessage=e.message||r.genericError}}},callbacks:{initButtonStyles:()=>{const{buttonStyle:e,backgroundColor:o,blockId:n}=t();if(n&&e){const t=document.createElement("style"),i=`#${n}`;t.textContent=function(e,t,o){const n=`${e} .wp-block-button__link`,r=function(e){if("string"==typeof e){const t=`--wp--preset--color--${e}`;return l(t)?`var(${t})`:null}return e?.color?.background||null}(o)||t?.color?.background;return s(n,c(t?.elements?.link?.color?.text),r,c(t?.elements?.link?.[":hover"]?.color?.text))}(i,e,o),document.head.appendChild(t);const a=document.createElement("style");a.textContent=(r=e,s(".activitypub-dialog__button-group .wp-block-button",c(r?.elements?.link?.color?.text)||"#111","#fff",c(r?.elements?.link?.[":hover"]?.color?.text)||"#333")),document.head.appendChild(a)}var r},isHandle(e){const t=e.replace(/^@/,"").split("@");return 2===t.length&&u.isUrl(`https://${t[1]}`)},isUrl(e){try{return new URL(e),!0}catch(e){return!1}},onModalClose(){t().isError=!1}}}); \ No newline at end of file diff --git a/build/followers/index.asset.php b/build/followers/index.asset.php index 15996391a..12359d721 100644 --- a/build/followers/index.asset.php +++ b/build/followers/index.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => 'f4361b0609386bc3e0eb'); + array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => 'b213f59fe70e84a0ca8c'); diff --git a/build/followers/index.js b/build/followers/index.js index 982045e71..0300bfb28 100644 --- a/build/followers/index.js +++ b/build/followers/index.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var e,t={20:(e,t,a)=>{var r=a(609),l=Symbol.for("react.element"),o=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),n=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};t.jsx=function(e,t,a){var r,i={},c=null,p=null;for(r in void 0!==a&&(c=""+a),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(p=t.ref),t)o.call(t,r)&&!s.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:l,type:e,key:c,ref:p,props:i,_owner:n.current}}},609:e=>{e.exports=window.React},751:(e,t,a)=>{const r=window.wp.blocks,l=window.wp.primitives;var o=a(848);const n=(0,o.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,o.jsx)(l.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),s=[{attributes:{title:{type:"string",default:"Fediverse Followers"},selectedUser:{type:"string",default:"blog"},per_page:{type:"number",default:10},order:{type:"string",default:"desc",enum:["asc","desc"]}},supports:{html:!1},isEligible:({title:e})=>!!e,migrate:({title:e,...t})=>[t,[(0,r.createBlock)("core/heading",{content:e,level:3})]]}];var i=a(609);const c=window.wp.apiFetch;var p=a.n(c);const u=window.wp.components,d=window.wp.blockEditor,v=window.wp.coreData,m=window.wp.data,f=window.wp.element,w=window.wp.url,g=window.wp.i18n;function h(){return window._activityPubOptions||{}}function b({name:e}){const{enabled:t}=h(),a=t?.blog?"":(0,g.__)("It will be empty in other non-author contexts.","activitypub"),r=(0,g.sprintf)(/* translators: %1$s: block name, %2$s: extra information for non-author context */ /* translators: %1$s: block name, %2$s: extra information for non-author context */ -(0,g.__)("This %1$s block will adapt to the page it is on, displaying the user profile associated with a post author (in a loop) or a user archive. %2$s","activitypub"),e,a).trim();return(0,i.createElement)(u.Card,null,(0,i.createElement)(u.CardBody,null,(0,f.createInterpolateElement)(r,{strong:(0,i.createElement)("strong",null)})))}function _({selectedUser:e,per_page:t,order:a,page:r,setPage:l,followerData:o=!1}){const n="blog"===e?0:e,[s,c]=(0,f.useState)([]),[u,d]=(0,f.useState)(0),[v,m]=(0,f.useState)(0),[b,_]=(0,f.useState)(1),x=r||b,k=l||_,N=(e,a)=>{c(e),m(a),d(Math.ceil(a/t))};return(0,f.useEffect)((()=>{if(o&&1===x)return N(o.followers,o.total);const e=function(e,t,a,r){const{namespace:l}=h(),o=`/${l}/actors/${e}/followers`,n={per_page:t,order:a,page:r,context:"full"};return(0,w.addQueryArgs)(o,n)}(n,t,a,x);p()({path:e}).then((({orderedItems:e,totalItems:t})=>N(e,t))).catch((()=>N([],0)))}),[n,t,a,x,o]),(0,i.createElement)("div",{className:"followers-container"},s.length?(0,i.createElement)("ul",{className:"followers-list"},s.map((e=>(0,i.createElement)("li",{key:e.url,className:"follower-item"},(0,i.createElement)(E,{...e}))))):(0,i.createElement)("p",{className:"followers-placeholder"},(0,g.__)("No followers found.","activitypub")),(0,i.createElement)(y,{page:x,pages:u,setPage:k}))}function y({page:e,pages:t,setPage:a}){if(t<=1)return null;const r=e<=1,l=e>=t;return(0,i.createElement)("nav",{className:"followers-pagination",role:"navigation"},(0,i.createElement)("h1",{className:"screen-reader-text"},(0,g.__)("Follower navigation","activitypub")),(0,i.createElement)("a",{className:"pagination-previous","aria-disabled":r,"aria-label":(0,g.__)("Previous page","activitypub"),onClick:t=>{t.preventDefault(),a(e-1)}},(0,g.__)("Previous","activitypub")),(0,i.createElement)("div",{className:"pagination-info"},`${e} / ${t}`),(0,i.createElement)("a",{className:"pagination-next","aria-disabled":l,"aria-label":(0,g.__)("Next page","activitypub"),onClick:t=>{t.preventDefault(),a(e+1)}},(0,g.__)("Next","activitypub")))}function E({name:e,icon:t,url:a,preferredUsername:r}){const l=`@${r}`,{defaultAvatarUrl:o}=h(),n=t?.url||o;return(0,i.createElement)("a",{className:"follower-link",href:a,title:l,onClick:e=>e.preventDefault()},(0,i.createElement)("img",{width:"48",height:"48",src:n,className:"follower-avatar",alt:e,onError:e=>{e.target.src=o}}),(0,i.createElement)("div",{className:"follower-info"},(0,i.createElement)("span",{className:"follower-name"},e),(0,i.createElement)("span",{className:"follower-username"},l)),(0,i.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24",className:"external-link-icon","aria-hidden":"true",focusable:"false",fill:"currentColor"},(0,i.createElement)("path",{d:"M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"})))}const x=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","name":"activitypub/followers","apiVersion":3,"version":"2.0.1","title":"Fediverse Followers","category":"widgets","description":"Display your followers from the Fediverse on your website.","textdomain":"activitypub","icon":"groups","supports":{"html":false,"interactivity":true},"attributes":{"selectedUser":{"type":"string","default":"blog"},"per_page":{"type":"number","default":10},"order":{"type":"string","default":"desc","enum":["asc","desc"]}},"usesContext":["postType","postId"],"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"card","label":"Card"},{"name":"compact","label":"Compact"}],"editorScript":"file:./index.js","editorStyle":"file:./index.css","viewScriptModule":"file:./view.js","viewScript":"wp-api-fetch","style":["file:./style-index.css"],"render":"file:./render.php"}');(0,r.registerBlockType)(x,{deprecated:s,edit:function({attributes:e,setAttributes:t,context:{postType:a,postId:r}}){const{className:l="",order:o,per_page:n,selectedUser:s}=e,c=(0,d.useBlockProps)(),[w,y]=(0,f.useState)(1),E=[{label:(0,g.__)("New to old","activitypub"),value:"desc"},{label:(0,g.__)("Old to new","activitypub"),value:"asc"}],x=function({withInherit:e=!1}){const{enabled:t,namespace:a}=h(),[r,l]=(0,f.useState)(!1),{fetchedUsers:o,isLoadingUsers:n}=(0,m.useSelect)((e=>{const{getUsers:a,getIsResolving:r}=e("core");return{fetchedUsers:t?.users?a({capabilities:"activitypub"}):null,isLoadingUsers:!!t?.users&&r("getUsers",[{capabilities:"activitypub"}])}}),[]),s=(0,m.useSelect)((e=>o||n?null:e("core").getCurrentUser()),[o,n]);(0,f.useEffect)((()=>{o||n||!s||p()({path:`/${a}/actors/${s.id}`,method:"HEAD",headers:{Accept:"application/activity+json"},parse:!1}).then((()=>l(!0))).catch((()=>l(!1)))}),[o,n,s]);const i=o||(s&&r?[{id:s.id,name:s.name}]:[]);return(0,f.useMemo)((()=>{if(!i.length)return[];const a=[];return t?.blog&&o&&a.push({label:(0,g.__)("Blog","activitypub"),value:"blog"}),e&&t?.users&&o&&a.push({label:(0,g.__)("Dynamic User","activitypub"),value:"inherit"}),i.reduce(((e,t)=>(e.push({label:t.name,value:`${t.id}`}),e)),a)}),[i])}({withInherit:!0}),k=e=>a=>{y(1),t({[e]:a})},N=(0,m.useSelect)((e=>{const{getEditedEntityRecord:t}=e(v.store),l=t("postType",a,r)?.author;return null!=l?l:null}),[a,r]);(0,f.useEffect)((()=>{x.length&&(x.find((({value:e})=>e===s))||t({selectedUser:x[0].value}))}),[s,x]);const S=[["core/heading",{level:3,placeholder:(0,g.__)("Fediverse Followers","activitypub"),content:(0,g.__)("Fediverse Followers","activitypub")}]];return(0,i.createElement)("div",{...c},(0,i.createElement)(d.InspectorControls,{key:"setting"},(0,i.createElement)(u.PanelBody,{title:(0,g.__)("Followers Options","activitypub")},x.length>1&&(0,i.createElement)(u.SelectControl,{label:(0,g.__)("Select User","activitypub"),value:s,options:x,onChange:k("selectedUser"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,i.createElement)(u.SelectControl,{label:(0,g.__)("Sort","activitypub"),value:o,options:E,onChange:k("order"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,i.createElement)(u.RangeControl,{label:(0,g.__)("Number of Followers","activitypub"),value:n,onChange:k("per_page"),min:1,max:10,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}))),(0,i.createElement)("div",{className:"wp-block-activitypub-followers "+l},(0,i.createElement)(d.InnerBlocks,{template:S,allowedBlocks:["core/heading"],templateLock:"all",renderAppender:!1}),"inherit"===s?N?(0,i.createElement)(_,{...e,page:w,setPage:y,selectedUser:N}):(0,i.createElement)(b,{name:(0,g.__)("Followers","activitypub")}):(0,i.createElement)(_,{...e,page:w,setPage:y})))},save:function(){const e=d.useBlockProps.save(),t=d.useInnerBlocksProps.save(e);return(0,i.createElement)("div",{...t})},icon:n})},848:(e,t,a)=>{e.exports=a(20)}},a={};function r(e){var l=a[e];if(void 0!==l)return l.exports;var o=a[e]={exports:{}};return t[e](o,o.exports,r),o.exports}r.m=t,e=[],r.O=(t,a,l,o)=>{if(!a){var n=1/0;for(p=0;p=o)&&Object.keys(r.O).every((e=>r.O[e](a[i])))?a.splice(i--,1):(s=!1,o0&&e[p-1][2]>o;p--)e[p]=e[p-1];e[p]=[a,l,o]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={149:0,17:0};r.O.j=t=>0===e[t];var t=(t,a)=>{var l,o,[n,s,i]=a,c=0;if(n.some((t=>0!==e[t]))){for(l in s)r.o(s,l)&&(r.m[l]=s[l]);if(i)var p=i(r)}for(t&&t(a);cr(751)));l=r.O(l)})(); \ No newline at end of file +(()=>{"use strict";var e,t={454:(e,t,s)=>{const a=window.wp.blocks,r=window.wp.primitives,l=window.ReactJSXRuntime,i=(0,l.jsx)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,l.jsx)(r.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),o=[{attributes:{title:{type:"string",default:"Fediverse Followers"},selectedUser:{type:"string",default:"blog"},per_page:{type:"number",default:10},order:{type:"string",default:"desc",enum:["asc","desc"]}},supports:{html:!1},isEligible:({title:e})=>!!e,migrate:({title:e,...t})=>[t,[(0,a.createBlock)("core/heading",{content:e,level:3})]]}],n=window.wp.apiFetch;var c=s.n(n);const p=window.wp.components,u=window.wp.blockEditor,d=window.wp.coreData,v=window.wp.data,h=window.wp.element,g=window.wp.url,w=window.wp.i18n;function f(){return window._activityPubOptions||{}}function b({name:e}){const{enabled:t}=f(),s=t?.blog?"":(0,w.__)("It will be empty in other non-author contexts.","activitypub"),a=(0,w.sprintf)(/* translators: %1$s: block name, %2$s: extra information for non-author context */ /* translators: %1$s: block name, %2$s: extra information for non-author context */ +(0,w.__)("This %1$s block will adapt to the page it is on, displaying the user profile associated with a post author (in a loop) or a user archive. %2$s","activitypub"),e,s).trim();return(0,l.jsx)(p.Card,{children:(0,l.jsx)(p.CardBody,{children:(0,h.createInterpolateElement)(a,{strong:(0,l.jsx)("strong",{})})})})}function m({selectedUser:e,per_page:t,order:s,page:a,setPage:r,followerData:i=!1}){const o="blog"===e?0:e,[n,p]=(0,h.useState)([]),[u,d]=(0,h.useState)(0),[v,b]=(0,h.useState)(0),[m,y]=(0,h.useState)(1),j=a||m,N=r||y,k=(e,s)=>{p(e),b(s),d(Math.ceil(s/t))};return(0,h.useEffect)(()=>{if(i&&1===j)return k(i.followers,i.total);const e=function(e,t,s,a){const{namespace:r}=f(),l=`/${r}/actors/${e}/followers`,i={per_page:t,order:s,page:a,context:"full"};return(0,g.addQueryArgs)(l,i)}(o,t,s,j);c()({path:e}).then(({orderedItems:e,totalItems:t})=>k(e,t)).catch(()=>k([],0))},[o,t,s,j,i]),(0,l.jsxs)("div",{className:"followers-container",children:[n.length?(0,l.jsx)("ul",{className:"followers-list",children:n.map(e=>(0,l.jsx)("li",{className:"follower-item",children:(0,l.jsx)(_,{...e})},e.url))}):(0,l.jsx)("p",{className:"followers-placeholder",children:(0,w.__)("No followers found.","activitypub")}),(0,l.jsx)(x,{page:j,pages:u,setPage:N})]})}function x({page:e,pages:t,setPage:s}){if(t<=1)return null;const a=e<=1,r=e>=t;return(0,l.jsxs)("nav",{className:"followers-pagination",role:"navigation",children:[(0,l.jsx)("h1",{className:"screen-reader-text",children:(0,w.__)("Follower navigation","activitypub")}),(0,l.jsx)("a",{className:"pagination-previous","aria-disabled":a,"aria-label":(0,w.__)("Previous page","activitypub"),onClick:t=>{t.preventDefault(),s(e-1)},children:(0,w.__)("Previous","activitypub")}),(0,l.jsx)("div",{className:"pagination-info",children:`${e} / ${t}`}),(0,l.jsx)("a",{className:"pagination-next","aria-disabled":r,"aria-label":(0,w.__)("Next page","activitypub"),onClick:t=>{t.preventDefault(),s(e+1)},children:(0,w.__)("Next","activitypub")})]})}function _({name:e,icon:t,url:s,preferredUsername:a}){const r=`@${a}`,{defaultAvatarUrl:i}=f(),o=t?.url||i;return(0,l.jsxs)("a",{className:"follower-link",href:s,title:r,onClick:e=>e.preventDefault(),children:[(0,l.jsx)("img",{width:"48",height:"48",src:o,className:"follower-avatar",alt:e,onError:e=>{e.target.src=i}}),(0,l.jsxs)("div",{className:"follower-info",children:[(0,l.jsx)("span",{className:"follower-name",children:e}),(0,l.jsx)("span",{className:"follower-username",children:r})]}),(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"24",height:"24",className:"external-link-icon","aria-hidden":"true",focusable:"false",fill:"currentColor",children:(0,l.jsx)("path",{d:"M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"})})]})}const y=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","name":"activitypub/followers","apiVersion":3,"version":"2.0.1","title":"Fediverse Followers","category":"widgets","description":"Display your followers from the Fediverse on your website.","textdomain":"activitypub","icon":"groups","supports":{"html":false,"interactivity":true},"attributes":{"selectedUser":{"type":"string","default":"blog"},"per_page":{"type":"number","default":10},"order":{"type":"string","default":"desc","enum":["asc","desc"]}},"usesContext":["postType","postId"],"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"card","label":"Card"},{"name":"compact","label":"Compact"}],"editorScript":"file:./index.js","editorStyle":"file:./index.css","viewScriptModule":"file:./view.js","viewScript":"wp-api-fetch","style":["file:./style-index.css"],"render":"file:./render.php"}');(0,a.registerBlockType)(y,{deprecated:o,edit:function({attributes:e,setAttributes:t,context:{postType:s,postId:a}}){const{className:r="",order:i,per_page:o,selectedUser:n}=e,g=(0,u.useBlockProps)(),[x,_]=(0,h.useState)(1),y=[{label:(0,w.__)("New to old","activitypub"),value:"desc"},{label:(0,w.__)("Old to new","activitypub"),value:"asc"}],j=function({withInherit:e=!1}){const{enabled:t,namespace:s}=f(),[a,r]=(0,h.useState)(!1),{fetchedUsers:l,isLoadingUsers:i}=(0,v.useSelect)(e=>{const{getUsers:s,getIsResolving:a}=e("core");return{fetchedUsers:t?.users?s({capabilities:"activitypub"}):null,isLoadingUsers:!!t?.users&&a("getUsers",[{capabilities:"activitypub"}])}},[]),o=(0,v.useSelect)(e=>l||i?null:e("core").getCurrentUser(),[l,i]);(0,h.useEffect)(()=>{l||i||!o||c()({path:`/${s}/actors/${o.id}`,method:"HEAD",headers:{Accept:"application/activity+json"},parse:!1}).then(()=>r(!0)).catch(()=>r(!1))},[l,i,o]);const n=l||(o&&a?[{id:o.id,name:o.name}]:[]);return(0,h.useMemo)(()=>{if(!n.length)return[];const s=[];return t?.blog&&l&&s.push({label:(0,w.__)("Blog","activitypub"),value:"blog"}),e&&t?.users&&l&&s.push({label:(0,w.__)("Dynamic User","activitypub"),value:"inherit"}),n.reduce((e,t)=>(e.push({label:t.name,value:`${t.id}`}),e),s)},[n])}({withInherit:!0}),N=e=>s=>{_(1),t({[e]:s})},k=(0,v.useSelect)(e=>{const{getEditedEntityRecord:t}=e(d.store),r=t("postType",s,a)?.author;return null!=r?r:null},[s,a]);(0,h.useEffect)(()=>{j.length&&(j.find(({value:e})=>e===n)||t({selectedUser:j[0].value}))},[n,j]);const S=[["core/heading",{level:3,placeholder:(0,w.__)("Fediverse Followers","activitypub"),content:(0,w.__)("Fediverse Followers","activitypub")}]];return(0,l.jsxs)("div",{...g,children:[(0,l.jsx)(u.InspectorControls,{children:(0,l.jsxs)(p.PanelBody,{title:(0,w.__)("Followers Options","activitypub"),children:[j.length>1&&(0,l.jsx)(p.SelectControl,{label:(0,w.__)("Select User","activitypub"),value:n,options:j,onChange:N("selectedUser"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,l.jsx)(p.SelectControl,{label:(0,w.__)("Sort","activitypub"),value:i,options:y,onChange:N("order"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,l.jsx)(p.RangeControl,{label:(0,w.__)("Number of Followers","activitypub"),value:o,onChange:N("per_page"),min:1,max:10,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})},"setting"),(0,l.jsxs)("div",{className:"wp-block-activitypub-followers "+r,children:[(0,l.jsx)(u.InnerBlocks,{template:S,allowedBlocks:["core/heading"],templateLock:"all",renderAppender:!1}),"inherit"===n?k?(0,l.jsx)(m,{...e,page:x,setPage:_,selectedUser:k}):(0,l.jsx)(b,{name:(0,w.__)("Followers","activitypub")}):(0,l.jsx)(m,{...e,page:x,setPage:_})]})]})},save:function(){const e=u.useBlockProps.save(),t=u.useInnerBlocksProps.save(e);return(0,l.jsx)("div",{...t})},icon:i})}},s={};function a(e){var r=s[e];if(void 0!==r)return r.exports;var l=s[e]={exports:{}};return t[e](l,l.exports,a),l.exports}a.m=t,e=[],a.O=(t,s,r,l)=>{if(!s){var i=1/0;for(p=0;p=l)&&Object.keys(a.O).every(e=>a.O[e](s[n]))?s.splice(n--,1):(o=!1,l0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[s,r,l]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var s in t)a.o(t,s)&&!a.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={149:0,17:0};a.O.j=t=>0===e[t];var t=(t,s)=>{var r,l,[i,o,n]=s,c=0;if(i.some(t=>0!==e[t])){for(r in o)a.o(o,r)&&(a.m[r]=o[r]);if(n)var p=n(a)}for(t&&t(s);ca(454));r=a.O(r)})(); \ No newline at end of file diff --git a/build/followers/view.asset.php b/build/followers/view.asset.php index 7b5ec64c4..211a93056 100644 --- a/build/followers/view.asset.php +++ b/build/followers/view.asset.php @@ -1 +1 @@ - array('@wordpress/interactivity'), 'version' => '5411018a8072e4c95c87', 'type' => 'module'); + array('@wordpress/interactivity'), 'version' => 'f0b102d4075c98757bf3', 'type' => 'module'); diff --git a/build/followers/view.js b/build/followers/view.js index 108115c8b..76905b1b8 100644 --- a/build/followers/view.js +++ b/build/followers/view.js @@ -1 +1 @@ -import*as e from"@wordpress/interactivity";var t={d:(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const r=(s={getConfig:()=>e.getConfig,getContext:()=>e.getContext,store:()=>e.store},g={},t.d(g,s),g),{apiFetch:o,url:a}=window.wp,{actions:n}=(0,r.store)("activitypub/followers",{state:{get paginationText(){const{page:e,pages:t}=(0,r.getContext)();return`${e} / ${t}`},get disablePreviousLink(){const{page:e}=(0,r.getContext)();return e<=1},get disableNextLink(){const{page:e,pages:t}=(0,r.getContext)();return e>=t}},actions:{async fetchFollowers(){const e=(0,r.getContext)(),{userId:t,page:n,per_page:s,order:g}=e;e.isLoading=!0;try{const{namespace:l}=(0,r.getConfig)(),c=a.addQueryArgs(`/${l}/actors/${t}/followers`,{context:"full",per_page:s,order:g,page:n}),{orderedItems:i,totalItems:p}=await o({path:c});e.followers=i.map((e=>({handle:"@"+e.preferredUsername,icon:e.icon,name:e.name||e.preferredUsername,url:e.url||e.id}))),e.total=p,e.pages=Math.ceil(p/s)}catch(e){console.error("Error fetching followers:",e)}finally{e.isLoading=!1}},previousPage(e){e.preventDefault();const t=(0,r.getContext)();t.page>1&&(t.page--,n.fetchFollowers().catch((e=>{console.error("Error fetching followers:",e)})))},nextPage(e){e.preventDefault();const t=(0,r.getContext)();t.page{console.error("Error fetching followers:",e)})))}},callbacks:{setDefaultAvatar(e){e.target.src=(0,r.getConfig)().defaultAvatarUrl}}});var s,g; \ No newline at end of file +import{getConfig as e,getContext as r,store as t}from"@wordpress/interactivity";const{apiFetch:a,url:o}=window.wp,{actions:s}=t("activitypub/followers",{state:{get paginationText(){const{page:e,pages:t}=r();return`${e} / ${t}`},get disablePreviousLink(){const{page:e}=r();return e<=1},get disableNextLink(){const{page:e,pages:t}=r();return e>=t}},actions:{async fetchFollowers(){const t=r(),{userId:s,page:n,per_page:l,order:c}=t;t.isLoading=!0;try{const{namespace:r}=e(),i=o.addQueryArgs(`/${r}/actors/${s}/followers`,{context:"full",per_page:l,order:c,page:n}),{orderedItems:g,totalItems:p}=await a({path:i});t.followers=g.map(e=>({handle:"@"+e.preferredUsername,icon:e.icon,name:e.name||e.preferredUsername,url:e.url||e.id})),t.total=p,t.pages=Math.ceil(p/l)}catch(e){console.error("Error fetching followers:",e)}finally{t.isLoading=!1}},previousPage(e){e.preventDefault();const t=r();t.page>1&&(t.page--,s.fetchFollowers().catch(e=>{console.error("Error fetching followers:",e)}))},nextPage(e){e.preventDefault();const t=r();t.page{console.error("Error fetching followers:",e)}))}},callbacks:{setDefaultAvatar(r){r.target.src=e().defaultAvatarUrl}}}); \ No newline at end of file diff --git a/build/reactions/index.asset.php b/build/reactions/index.asset.php index 1c498e386..9d799d3b5 100644 --- a/build/reactions/index.asset.php +++ b/build/reactions/index.asset.php @@ -1 +1 @@ - array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => '7f460a8fc211166884fa'); + array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => '19f79df5e0c04bf68777'); diff --git a/build/reactions/index.js b/build/reactions/index.js index 17e35b7d0..7b968fa92 100644 --- a/build/reactions/index.js +++ b/build/reactions/index.js @@ -1,3 +1,3 @@ -(()=>{"use strict";var e,t={646:(e,t,r)=>{const a=window.wp.blocks,n=[{attributes:{title:{type:"string",default:"Fediverse reactions"}},supports:{html:!1,color:{gradients:!0,link:!0,__experimentalDefaultControls:{background:!0,text:!0,link:!0}},__experimentalBorder:{radius:!0,width:!0,color:!0,style:!0},typography:{fontSize:!0,__experimentalDefaultControls:{fontSize:!0}}},isEligible:({title:e})=>!!e,migrate:({title:e,...t})=>[t,[(0,a.createBlock)("core/heading",{content:e,level:6})]]}],l=window.React,i=window.wp.blockEditor,o=window.wp.i18n,s=window.wp.data,c=window.wp.element,u=window.wp.components,p=window.wp.apiFetch;var m=r.n(p);function d(){return window._activityPubOptions||{}}const f=({reactions:e})=>{const{defaultAvatarUrl:t}=d();return(0,l.createElement)("ul",{className:"reaction-avatars"},e.map(((e,r)=>{const a=["reaction-avatar"].filter(Boolean).join(" "),n=e.avatar||t;return(0,l.createElement)("li",{key:r},(0,l.createElement)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},(0,l.createElement)("img",{src:n,alt:e.name,className:a,width:"32",height:"32",onError:e=>{e.target.src=t}})))})))},v=({reactions:e})=>{const{defaultAvatarUrl:t}=d();return(0,l.createElement)("ul",{className:"reactions-list"},e.map(((e,r)=>{const a=e.avatar||t;return(0,l.createElement)("li",{key:r,className:"reaction-item"},(0,l.createElement)("a",{href:e.url,className:"reaction-item",target:"_blank",rel:"noopener noreferrer"},(0,l.createElement)("img",{src:a,alt:e.name,width:"32",height:"32",onError:e=>{e.target.src=t}}),(0,l.createElement)("span",{className:"reaction-name"},e.name)))})))},h=({items:e,label:t})=>{const[r,a]=(0,c.useState)(!1),[n,i]=(0,c.useState)(null),o=(0,c.useRef)(null),s=e.slice(0,20);return(0,l.createElement)("div",{className:"reaction-group",ref:o},(0,l.createElement)(f,{reactions:s}),(0,l.createElement)(u.Button,{ref:i,className:"reaction-label is-link",onClick:()=>a(!r),"aria-expanded":r},t),r&&n&&(0,l.createElement)(u.Popover,{anchor:n,onClose:()=>a(!1)},(0,l.createElement)(v,{reactions:e})))};function w({postId:e=null,reactions:t=null,fallbackReactions:r=null}){const{namespace:a}=d(),[n,i]=(0,c.useState)(t),[o,s]=(0,c.useState)(!t),u=()=>{r&&i(r),s(!1)};return(0,c.useEffect)((()=>{if(t)return i(t),void s(!1);e&&"number"==typeof e?(s(!0),m()({path:`/${a}/posts/${e}/reactions`}).then((e=>{const t=Object.values(e).some((e=>e.items?.length>0));i(!t&&r?r:e),s(!1)})).catch(u)):u()}),[e,t,r,a]),o?null:n&&Object.values(n).some((e=>e.items?.length>0))?(0,l.createElement)(l.Fragment,null,Object.entries(n).map((([e,t])=>t.items?.length?(0,l.createElement)(h,{key:e,items:t.items,label:t.label}):null))):null}const g=(e,t,r,a)=>Array.from({length:e},((e,n)=>({name:`${t} ${n+1}`,url:"#",avatar:`data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Ccircle cx='32' cy='32' r='32' fill='%23${a[n%a.length]}'/%3E%3Ctext x='32' y='38' font-family='sans-serif' font-size='24' fill='white' text-anchor='middle'%3E${String.fromCharCode(r+n)}%3C/text%3E%3C/svg%3E`}))),b=["FF6B6B","4ECDC4","45B7D1","96CEB4","D4A5A5","9B59B6","3498DB","E67E22"],y={likes:{label:(0,o.sprintf)(/* translators: %d: Number of likes */ /* translators: %d: Number of likes */ -(0,o._x)("%d likes","number of likes","activitypub"),9),items:g(9,"User",65,b)},reposts:{label:(0,o.sprintf)(/* translators: %d: Number of reposts */ /* translators: %d: Number of reposts */ -(0,o._x)("%d reposts","number of reposts","activitypub"),6),items:g(6,"Reposter",82,b)}},E=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","name":"activitypub/reactions","apiVersion":3,"version":"3.0.3","title":"Fediverse Reactions","category":"widgets","icon":"heart","description":"Display Fediverse likes and reposts","supports":{"align":["wide","full"],"color":{"gradients":true},"__experimentalBorder":{"radius":true,"width":true,"color":true,"style":true},"html":false,"interactivity":true,"layout":{"default":{"type":"constrained","orientation":"vertical","justifyContent":"center"},"allowEditing":false},"shadow":true,"typography":{"fontSize":true,"__experimentalDefaultControls":{"fontSize":true}}},"blockHooks":{"core/post-content":"after"},"textdomain":"activitypub","editorScript":"file:./index.js","style":"file:./style-index.css","viewScriptModule":"file:./view.js","viewScript":"wp-api-fetch","render":"file:./render.php"}');(0,a.registerBlockType)(E,{deprecated:n,edit:function({__unstableLayoutClassNames:e}){const t=(0,i.useBlockProps)({className:e}),{getCurrentPostId:r}=(0,s.select)("core/editor"),a=[["core/heading",{level:6,placeholder:(0,o.__)("Fediverse Reactions","activitypub"),content:(0,o.__)("Fediverse Reactions","activitypub")}]];return(0,l.createElement)("div",{...t},(0,l.createElement)(i.InnerBlocks,{template:a,allowedBlocks:["core/heading"],templateLock:"all",renderAppender:!1}),(0,l.createElement)(w,{postId:r(),fallbackReactions:y}))},save:function(){return(0,l.createElement)("div",{...i.useBlockProps.save()},(0,l.createElement)(i.InnerBlocks.Content,null))}})}},r={};function a(e){var n=r[e];if(void 0!==n)return n.exports;var l=r[e]={exports:{}};return t[e](l,l.exports,a),l.exports}a.m=t,e=[],a.O=(t,r,n,l)=>{if(!r){var i=1/0;for(u=0;u=l)&&Object.keys(a.O).every((e=>a.O[e](r[s])))?r.splice(s--,1):(o=!1,l0&&e[u-1][2]>l;u--)e[u]=e[u-1];e[u]=[r,n,l]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={608:0,104:0};a.O.j=t=>0===e[t];var t=(t,r)=>{var n,l,[i,o,s]=r,c=0;if(i.some((t=>0!==e[t]))){for(n in o)a.o(o,n)&&(a.m[n]=o[n]);if(s)var u=s(a)}for(t&&t(r);ca(646)));n=a.O(n)})(); \ No newline at end of file +(()=>{"use strict";var e,t={343:(e,t,r)=>{const n=window.wp.blocks,i=[{attributes:{title:{type:"string",default:"Fediverse reactions"}},supports:{html:!1,color:{gradients:!0,link:!0,__experimentalDefaultControls:{background:!0,text:!0,link:!0}},__experimentalBorder:{radius:!0,width:!0,color:!0,style:!0},typography:{fontSize:!0,__experimentalDefaultControls:{fontSize:!0}}},isEligible:({title:e})=>!!e,migrate:({title:e,...t})=>[t,[(0,n.createBlock)("core/heading",{content:e,level:6})]]}],s=window.wp.blockEditor,a=window.wp.i18n,o=window.wp.data,l=window.wp.element,c=window.wp.components,u=window.wp.apiFetch;var d=r.n(u);function p(){return window._activityPubOptions||{}}const f=window.ReactJSXRuntime,m=({reactions:e})=>{const{defaultAvatarUrl:t}=p();return(0,f.jsx)("ul",{className:"reaction-avatars",children:e.map((e,r)=>{const n=["reaction-avatar"].filter(Boolean).join(" "),i=e.avatar||t;return(0,f.jsx)("li",{children:(0,f.jsx)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",children:(0,f.jsx)("img",{src:i,alt:e.name,className:n,width:"32",height:"32",onError:e=>{e.target.src=t}})})},r)})})},h=({reactions:e})=>{const{defaultAvatarUrl:t}=p();return(0,f.jsx)("ul",{className:"reactions-list",children:e.map((e,r)=>{const n=e.avatar||t;return(0,f.jsx)("li",{className:"reaction-item",children:(0,f.jsxs)("a",{href:e.url,className:"reaction-item",target:"_blank",rel:"noopener noreferrer",children:[(0,f.jsx)("img",{src:n,alt:e.name,width:"32",height:"32",onError:e=>{e.target.src=t}}),(0,f.jsx)("span",{className:"reaction-name",children:e.name})]})},r)})})},v=({items:e,label:t})=>{const[r,n]=(0,l.useState)(!1),[i,s]=(0,l.useState)(null),a=(0,l.useRef)(null),o=e.slice(0,20);return(0,f.jsxs)("div",{className:"reaction-group",ref:a,children:[(0,f.jsx)(m,{reactions:o}),(0,f.jsx)(c.Button,{ref:s,className:"reaction-label is-link",onClick:()=>n(!r),"aria-expanded":r,children:t}),r&&i&&(0,f.jsx)(c.Popover,{anchor:i,onClose:()=>n(!1),children:(0,f.jsx)(h,{reactions:e})})]})};function w({postId:e=null,reactions:t=null,fallbackReactions:r=null}){const{namespace:n}=p(),[i,s]=(0,l.useState)(t),[a,o]=(0,l.useState)(!t),c=()=>{r&&s(r),o(!1)};return(0,l.useEffect)(()=>{if(t)return s(t),void o(!1);e&&"number"==typeof e?(o(!0),d()({path:`/${n}/posts/${e}/reactions`}).then(e=>{const t=Object.values(e).some(e=>e.items?.length>0);s(!t&&r?r:e),o(!1)}).catch(c)):c()},[e,t,r,n]),a?null:i&&Object.values(i).some(e=>e.items?.length>0)?(0,f.jsx)(f.Fragment,{children:Object.entries(i).map(([e,t])=>t.items?.length?(0,f.jsx)(v,{items:t.items,label:t.label},e):null)}):null}const g=(e,t,r,n)=>Array.from({length:e},(e,i)=>({name:`${t} ${i+1}`,url:"#",avatar:`data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Ccircle cx='32' cy='32' r='32' fill='%23${n[i%n.length]}'/%3E%3Ctext x='32' y='38' font-family='sans-serif' font-size='24' fill='white' text-anchor='middle'%3E${String.fromCharCode(r+i)}%3C/text%3E%3C/svg%3E`})),x=["FF6B6B","4ECDC4","45B7D1","96CEB4","D4A5A5","9B59B6","3498DB","E67E22"],b={likes:{label:(0,a.sprintf)(/* translators: %d: Number of likes */ /* translators: %d: Number of likes */ +(0,a._x)("%d likes","number of likes","activitypub"),9),items:g(9,"User",65,x)},reposts:{label:(0,a.sprintf)(/* translators: %d: Number of reposts */ /* translators: %d: Number of reposts */ +(0,a._x)("%d reposts","number of reposts","activitypub"),6),items:g(6,"Reposter",82,x)}},y=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","name":"activitypub/reactions","apiVersion":3,"version":"3.0.3","title":"Fediverse Reactions","category":"widgets","icon":"heart","description":"Display Fediverse likes and reposts","supports":{"align":["wide","full"],"color":{"gradients":true},"__experimentalBorder":{"radius":true,"width":true,"color":true,"style":true},"html":false,"interactivity":true,"layout":{"default":{"type":"constrained","orientation":"vertical","justifyContent":"center"},"allowEditing":false},"shadow":true,"typography":{"fontSize":true,"__experimentalDefaultControls":{"fontSize":true}}},"blockHooks":{"core/post-content":"after"},"textdomain":"activitypub","editorScript":"file:./index.js","style":"file:./style-index.css","viewScriptModule":"file:./view.js","viewScript":"wp-api-fetch","render":"file:./render.php"}');(0,n.registerBlockType)(y,{deprecated:i,edit:function({__unstableLayoutClassNames:e}){const t=(0,s.useBlockProps)({className:e}),{getCurrentPostId:r}=(0,o.select)("core/editor"),n=[["core/heading",{level:6,placeholder:(0,a.__)("Fediverse Reactions","activitypub"),content:(0,a.__)("Fediverse Reactions","activitypub")}]];return(0,f.jsxs)("div",{...t,children:[(0,f.jsx)(s.InnerBlocks,{template:n,allowedBlocks:["core/heading"],templateLock:"all",renderAppender:!1}),(0,f.jsx)(w,{postId:r(),fallbackReactions:b})]})},save:function(){return(0,f.jsx)("div",{...s.useBlockProps.save(),children:(0,f.jsx)(s.InnerBlocks.Content,{})})}})}},r={};function n(e){var i=r[e];if(void 0!==i)return i.exports;var s=r[e]={exports:{}};return t[e](s,s.exports,n),s.exports}n.m=t,e=[],n.O=(t,r,i,s)=>{if(!r){var a=1/0;for(u=0;u=s)&&Object.keys(n.O).every(e=>n.O[e](r[l]))?r.splice(l--,1):(o=!1,s0&&e[u-1][2]>s;u--)e[u]=e[u-1];e[u]=[r,i,s]},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={608:0,104:0};n.O.j=t=>0===e[t];var t=(t,r)=>{var i,s,[a,o,l]=r,c=0;if(a.some(t=>0!==e[t])){for(i in o)n.o(o,i)&&(n.m[i]=o[i]);if(l)var u=l(n)}for(t&&t(r);cn(343));i=n.O(i)})(); \ No newline at end of file diff --git a/build/reactions/view.asset.php b/build/reactions/view.asset.php index b0bc8e46f..c2b4f3ccb 100644 --- a/build/reactions/view.asset.php +++ b/build/reactions/view.asset.php @@ -1 +1 @@ - array('@wordpress/interactivity'), 'version' => '1fb302a91b9b62d50174', 'type' => 'module'); + array('@wordpress/interactivity'), 'version' => '97fae96804d06a1889ca', 'type' => 'module'); diff --git a/build/reactions/view.js b/build/reactions/view.js index a9f4c6125..684e25b3f 100644 --- a/build/reactions/view.js +++ b/build/reactions/view.js @@ -1 +1 @@ -import*as t from"@wordpress/interactivity";var e={d:(t,o)=>{for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const o=(n={getConfig:()=>t.getConfig,getContext:()=>t.getContext,getElement:()=>t.getElement,store:()=>t.store,withScope:()=>t.withScope},a={},e.d(a,n),a);var n,a;const{apiFetch:c}=window.wp;!function(){const{actions:t,callbacks:e}=(0,o.store)("activitypub/reactions",{actions:{openModal(t){const n=(0,o.getContext)();n.modal.isOpen=!0,n.modal.isCompact?setTimeout(e.positionModal,0):setTimeout((()=>{const t=document.getElementById(n.blockId);if(t){const o=t.querySelector(".activitypub-modal__frame");o&&e.trapFocus(o)}}),50),"function"==typeof e.onModalOpen&&e.onModalOpen(t)},closeModal(t){const n=(0,o.getContext)();n.modal.isOpen=!1;const a=(0,o.getElement)();if("actions.toggleModal"===a.ref.dataset["wpOn-Click"])a.ref.focus();else{const t=document.getElementById(n.blockId);if(t){const e=t.querySelector('[data-wp-on--click="actions.toggleModal"], [data-wp-on-async--click="actions.toggleModal"]');e&&e.focus()}}"function"==typeof e.onModalClose&&e.onModalClose(t)},toggleModal(e){const{modal:n}=(0,o.getContext)();n.isOpen?t.closeModal(e):t.openModal(e)}},callbacks:{_abortController:null,handleModalEffects(){const{modal:t}=(0,o.getContext)();if(t.isOpen&&!t.isCompact?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),e._abortController&&(e._abortController.abort(),e._abortController=null),t.isOpen){e._abortController=new AbortController;const{signal:t}=e._abortController;document.addEventListener("keydown",e.documentKeydown,{signal:t}),document.addEventListener("click",e.documentClick,{signal:t})}},documentKeydown(e){const{modal:n}=(0,o.getContext)();n.isOpen&&"Escape"===e.key&&t.closeModal()},documentClick(e){const{blockId:n,modal:a}=(0,o.getContext)();if(!a.isOpen)return;const c=document.getElementById(n);if(!c)return;const l=c.querySelector('.wp-element-button[data-wp-on--click="actions.toggleModal"]');if(l&&(l===e.target||l.contains(e.target)))return;const s=c.querySelector(".activitypub-modal__frame");s&&!s.contains(e.target)&&t.closeModal()},positionModal(){const{blockId:t}=(0,o.getContext)(),e=document.getElementById(t);if(!e)return;const n=e.querySelector(".activitypub-modal__overlay");if(!n)return;n.style.top="",n.style.left="",n.style.right="",n.style.bottom="";const a=(0,o.getElement)().ref.getBoundingClientRect(),c=window.innerWidth,l=e.getBoundingClientRect();let s={top:a.bottom-l.top+8+"px",left:a.left-l.left-2+"px"};c-a.right<250&&(s.left="auto",s.right=l.right-a.right+"px"),Object.assign(n.style,s)},trapFocus(t){const e=t.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]):not([readonly]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'),o=e[0],n=e[e.length-1];o&&o.classList.contains("activitypub-modal__close")&&e.length>1?e[1].focus():o.focus(),t.addEventListener("keydown",(function(t){"Tab"!==t.key&&9!==t.keyCode||(t.shiftKey?document.activeElement===o&&(n.focus(),t.preventDefault()):document.activeElement===n&&(o.focus(),t.preventDefault()))}))}}})}();const{callbacks:l,state:s}=(0,o.store)("activitypub/reactions",{actions:{async fetchReactions(){const t=(0,o.getContext)(),{namespace:e}=(0,o.getConfig)();if(t.postId)try{t.reactions=await c({path:`/${e}/posts/${t.postId}/reactions`})}catch(t){console.error("Error fetching reactions:",t)}}},callbacks:{initReactions(){const t=new ResizeObserver((0,o.withScope)(l.calculateVisibleAvatars));return(0,o.getElement)().ref.querySelectorAll(".reaction-group").forEach((e=>{t.observe(e)})),()=>{t.disconnect()}},calculateVisibleAvatars(){const{postId:t}=(0,o.getContext)();(s.reactions&&s.reactions[t]?Object.keys(s.reactions[t]):[]).forEach((e=>{s.reactions?.[t][e]?.items?.length&&(0,o.getElement)().ref.querySelectorAll(`.reaction-group[data-reaction-type="${e}"]`).forEach((o=>{const n=o.querySelector(".reaction-label").offsetWidth||0,a=o.offsetWidth-n-12;let c=1;a>32&&(c+=Math.floor((a-32)/22));const l=s.reactions[t][e].items,i=Math.min(c,l.length),r=o.querySelector(".reaction-avatars");r&&r.querySelectorAll("li").forEach(((t,e)=>{e{const t=document.getElementById(o.blockId);if(t){const e=t.querySelector(".activitypub-modal__frame");e&&a.trapFocus(e)}},50),"function"==typeof a.onModalOpen&&a.onModalOpen(t)},closeModal(t){const n=e();n.modal.isOpen=!1;const c=o();if("actions.toggleModal"===c.ref.dataset["wpOn-Click"])c.ref.focus();else{const t=document.getElementById(n.blockId);if(t){const e=t.querySelector('[data-wp-on--click="actions.toggleModal"], [data-wp-on-async--click="actions.toggleModal"]');e&&e.focus()}}"function"==typeof a.onModalClose&&a.onModalClose(t)},toggleModal(o){const{modal:n}=e();n.isOpen?t.closeModal(o):t.openModal(o)}},callbacks:{_abortController:null,handleModalEffects(){const{modal:t}=e();if(t.isOpen&&!t.isCompact?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),a._abortController&&(a._abortController.abort(),a._abortController=null),t.isOpen){a._abortController=new AbortController;const{signal:t}=a._abortController;document.addEventListener("keydown",a.documentKeydown,{signal:t}),document.addEventListener("click",a.documentClick,{signal:t})}},documentKeydown(o){const{modal:n}=e();n.isOpen&&"Escape"===o.key&&t.closeModal()},documentClick(o){const{blockId:n,modal:a}=e();if(!a.isOpen)return;const c=document.getElementById(n);if(!c)return;const l=c.querySelector('.wp-element-button[data-wp-on--click="actions.toggleModal"]');if(l&&(l===o.target||l.contains(o.target)))return;const s=c.querySelector(".activitypub-modal__frame");s&&!s.contains(o.target)&&t.closeModal()},positionModal(){const{blockId:t}=e(),n=document.getElementById(t);if(!n)return;const a=n.querySelector(".activitypub-modal__overlay");if(!a)return;a.style.top="",a.style.left="",a.style.right="",a.style.bottom="";const c=o().ref.getBoundingClientRect(),l=window.innerWidth,s=n.getBoundingClientRect();let i={top:c.bottom-s.top+8+"px",left:c.left-s.left-2+"px"};l-c.right<250&&(i.left="auto",i.right=s.right-c.right+"px"),Object.assign(a.style,i)},trapFocus(t){const e=t.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]):not([readonly]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'),o=e[0],n=e[e.length-1];o&&o.classList.contains("activitypub-modal__close")&&e.length>1?e[1].focus():o.focus(),t.addEventListener("keydown",function(t){"Tab"!==t.key&&9!==t.keyCode||(t.shiftKey?document.activeElement===o&&(n.focus(),t.preventDefault()):document.activeElement===n&&(o.focus(),t.preventDefault()))})}}})}();const{callbacks:l,state:s}=n("activitypub/reactions",{actions:{async fetchReactions(){const o=e(),{namespace:n}=t();if(o.postId)try{o.reactions=await c({path:`/${n}/posts/${o.postId}/reactions`})}catch(t){console.error("Error fetching reactions:",t)}}},callbacks:{initReactions(){const t=new ResizeObserver(a(l.calculateVisibleAvatars));return o().ref.querySelectorAll(".reaction-group").forEach(e=>{t.observe(e)}),()=>{t.disconnect()}},calculateVisibleAvatars(){const{postId:t}=e();(s.reactions&&s.reactions[t]?Object.keys(s.reactions[t]):[]).forEach(e=>{s.reactions?.[t][e]?.items?.length&&o().ref.querySelectorAll(`.reaction-group[data-reaction-type="${e}"]`).forEach(o=>{const n=o.querySelector(".reaction-label").offsetWidth||0,a=o.offsetWidth-n-12;let c=1;a>32&&(c+=Math.floor((a-32)/22));const l=s.reactions[t][e].items,i=Math.min(c,l.length),r=o.querySelector(".reaction-avatars");r&&r.querySelectorAll("li").forEach((t,e)=>{e array('@wordpress/interactivity'), 'version' => 'f55d39f584162dc95ab4', 'type' => 'module'); + array('@wordpress/interactivity'), 'version' => 'bb8eb819b949d4c63e53', 'type' => 'module'); diff --git a/build/remote-reply/view.js b/build/remote-reply/view.js index f02d48a7f..aed57a024 100644 --- a/build/remote-reply/view.js +++ b/build/remote-reply/view.js @@ -1 +1 @@ -import*as e from"@wordpress/interactivity";var t,o,r={764:(t,o,r)=>{const n=(l={getConfig:()=>e.getConfig,getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store},s={},r.d(s,l),s);var l,s;const{apiFetch:a}=window.wp;!function(){const{actions:e,callbacks:t}=(0,n.store)("activitypub/remote-reply",{actions:{openModal(e){const o=(0,n.getContext)();o.modal.isOpen=!0,o.modal.isCompact?setTimeout(t.positionModal,0):setTimeout((()=>{const e=document.getElementById(o.blockId);if(e){const o=e.querySelector(".activitypub-modal__frame");o&&t.trapFocus(o)}}),50),"function"==typeof t.onModalOpen&&t.onModalOpen(e)},closeModal(e){const o=(0,n.getContext)();o.modal.isOpen=!1;const r=(0,n.getElement)();if("actions.toggleModal"===r.ref.dataset["wpOn-Click"])r.ref.focus();else{const e=document.getElementById(o.blockId);if(e){const t=e.querySelector('[data-wp-on--click="actions.toggleModal"], [data-wp-on-async--click="actions.toggleModal"]');t&&t.focus()}}"function"==typeof t.onModalClose&&t.onModalClose(e)},toggleModal(t){const{modal:o}=(0,n.getContext)();o.isOpen?e.closeModal(t):e.openModal(t)}},callbacks:{_abortController:null,handleModalEffects(){const{modal:e}=(0,n.getContext)();if(e.isOpen&&!e.isCompact?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),t._abortController&&(t._abortController.abort(),t._abortController=null),e.isOpen){t._abortController=new AbortController;const{signal:e}=t._abortController;document.addEventListener("keydown",t.documentKeydown,{signal:e}),document.addEventListener("click",t.documentClick,{signal:e})}},documentKeydown(t){const{modal:o}=(0,n.getContext)();o.isOpen&&"Escape"===t.key&&e.closeModal()},documentClick(t){const{blockId:o,modal:r}=(0,n.getContext)();if(!r.isOpen)return;const l=document.getElementById(o);if(!l)return;const s=l.querySelector('.wp-element-button[data-wp-on--click="actions.toggleModal"]');if(s&&(s===t.target||s.contains(t.target)))return;const a=l.querySelector(".activitypub-modal__frame");a&&!a.contains(t.target)&&e.closeModal()},positionModal(){const{blockId:e}=(0,n.getContext)(),t=document.getElementById(e);if(!t)return;const o=t.querySelector(".activitypub-modal__overlay");if(!o)return;o.style.top="",o.style.left="",o.style.right="",o.style.bottom="";const r=(0,n.getElement)().ref.getBoundingClientRect(),l=window.innerWidth,s=t.getBoundingClientRect();let a={top:r.bottom-s.top+8+"px",left:r.left-s.left-2+"px"};l-r.right<250&&(a.left="auto",a.right=s.right-r.right+"px"),Object.assign(o.style,a)},trapFocus(e){const t=e.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]):not([readonly]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'),o=t[0],r=t[t.length-1];o&&o.classList.contains("activitypub-modal__close")&&t.length>1?t[1].focus():o.focus(),e.addEventListener("keydown",(function(e){"Tab"!==e.key&&9!==e.keyCode||(e.shiftKey?document.activeElement===o&&(r.focus(),e.preventDefault()):document.activeElement===r&&(o.focus(),e.preventDefault()))}))}}})}();const{actions:i,callbacks:c,state:d}=(0,n.store)("activitypub/remote-reply",{state:{get remoteProfileUrl(){const{commentURL:e}=(0,n.getContext)();return d.template.replace("{uri}",encodeURIComponent(e))}},actions:{onReplyLinkKeydown(e){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),i.toggleModal(e))},copyToClipboard(){const e=(0,n.getContext)(),{i18n:t}=(0,n.getConfig)();navigator.clipboard.writeText(e.commentURL).then((()=>{e.copyButtonText=t.copied,setTimeout((()=>{e.copyButtonText=t.copy}),1e3)}),(e=>{console.error("Could not copy text: ",e)}))},updateRemoteProfile(e){const t=(0,n.getContext)();t.remoteProfile=e.target.value,t.isError=!1,t.errorMessage=""},onInputKeydown(e){if("Enter"===e.key)return e.preventDefault(),i.submitRemoteProfile()},*submitRemoteProfile(){const e=(0,n.getContext)(),{namespace:t,i18n:o}=(0,n.getConfig)(),r=e.remoteProfile.trim();if(!r)return e.isError=!0,void(e.errorMessage=o.emptyProfileError);if(!c.isHandle(r)&&!c.isUrl(r))return e.isError=!0,void(e.errorMessage=o.invalidProfileError);e.isLoading=!0,e.isError=!1,e.errorMessage="";const l=`/${t}/comments/${e.commentId}/remote-reply?resource=${encodeURIComponent(r)}`;try{const{template:t,url:o}=yield a({path:l});e.isLoading=!1,window.open(o,"_blank"),i.closeModal(),e.shouldSaveProfile&&(c.setStore({profileURL:r,template:t}),Object.assign(d,{hasRemoteUser:!0,profileURL:r,template:t}))}catch(t){console.error("Error submitting profile:",t),e.isLoading=!1,e.isError=!0,e.errorMessage=t.message||o.genericError}},toggleRememberProfile(){const e=(0,n.getContext)();e.shouldSaveProfile=!e.shouldSaveProfile},deleteRemoteUser(){c.deleteStore(),d.hasRemoteUser=!1,d.profileURL="",d.template=""}},callbacks:{storageKey:"fediverse-remote-user",init(){const{profileURL:e,template:t}=c.getStore();e&&t&&Object.assign(d,{hasRemoteUser:!0,profileURL:e,template:t})},getStore(){const e=localStorage.getItem(c.storageKey);return e?JSON.parse(e):{}},setStore(e){localStorage.setItem(c.storageKey,JSON.stringify(e))},deleteStore(){localStorage.removeItem(c.storageKey)},isHandle(e){const t=e.replace(/^@/,"").split("@");return 2===t.length&&c.isUrl(`https://${t[1]}`)},isUrl(e){try{return new URL(e),!0}catch(e){return!1}}}})}},n={};function l(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,l),o.exports}l.m=r,t=[],l.O=(e,o,r,n)=>{if(!o){var s=1/0;for(d=0;d=n)&&Object.keys(l.O).every((e=>l.O[e](o[i])))?o.splice(i--,1):(a=!1,n0&&t[d-1][2]>n;d--)t[d]=t[d-1];t[d]=[o,r,n]},l.d=(e,t)=>{for(var o in t)l.o(t,o)&&!l.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={466:0,354:0},l.O.j=e=>0===o[e];var s=l.O(void 0,[354],(()=>l(764)));s=l.O(s); \ No newline at end of file +import{getConfig as e,getContext as t,getElement as o,store as r}from"@wordpress/interactivity";var n,l={764:()=>{const{apiFetch:n}=window.wp;!function(){const{actions:e,callbacks:n}=r("activitypub/remote-reply",{actions:{openModal(e){const o=t();o.modal.isOpen=!0,o.modal.isCompact?setTimeout(n.positionModal,0):setTimeout(()=>{const e=document.getElementById(o.blockId);if(e){const t=e.querySelector(".activitypub-modal__frame");t&&n.trapFocus(t)}},50),"function"==typeof n.onModalOpen&&n.onModalOpen(e)},closeModal(e){const r=t();r.modal.isOpen=!1;const l=o();if("actions.toggleModal"===l.ref.dataset["wpOn-Click"])l.ref.focus();else{const e=document.getElementById(r.blockId);if(e){const t=e.querySelector('[data-wp-on--click="actions.toggleModal"], [data-wp-on-async--click="actions.toggleModal"]');t&&t.focus()}}"function"==typeof n.onModalClose&&n.onModalClose(e)},toggleModal(o){const{modal:r}=t();r.isOpen?e.closeModal(o):e.openModal(o)}},callbacks:{_abortController:null,handleModalEffects(){const{modal:e}=t();if(e.isOpen&&!e.isCompact?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),n._abortController&&(n._abortController.abort(),n._abortController=null),e.isOpen){n._abortController=new AbortController;const{signal:e}=n._abortController;document.addEventListener("keydown",n.documentKeydown,{signal:e}),document.addEventListener("click",n.documentClick,{signal:e})}},documentKeydown(o){const{modal:r}=t();r.isOpen&&"Escape"===o.key&&e.closeModal()},documentClick(o){const{blockId:r,modal:n}=t();if(!n.isOpen)return;const l=document.getElementById(r);if(!l)return;const s=l.querySelector('.wp-element-button[data-wp-on--click="actions.toggleModal"]');if(s&&(s===o.target||s.contains(o.target)))return;const a=l.querySelector(".activitypub-modal__frame");a&&!a.contains(o.target)&&e.closeModal()},positionModal(){const{blockId:e}=t(),r=document.getElementById(e);if(!r)return;const n=r.querySelector(".activitypub-modal__overlay");if(!n)return;n.style.top="",n.style.left="",n.style.right="",n.style.bottom="";const l=o().ref.getBoundingClientRect(),s=window.innerWidth,a=r.getBoundingClientRect();let i={top:l.bottom-a.top+8+"px",left:l.left-a.left-2+"px"};s-l.right<250&&(i.left="auto",i.right=a.right-l.right+"px"),Object.assign(n.style,i)},trapFocus(e){const t=e.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]):not([readonly]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'),o=t[0],r=t[t.length-1];o&&o.classList.contains("activitypub-modal__close")&&t.length>1?t[1].focus():o.focus(),e.addEventListener("keydown",function(e){"Tab"!==e.key&&9!==e.keyCode||(e.shiftKey?document.activeElement===o&&(r.focus(),e.preventDefault()):document.activeElement===r&&(o.focus(),e.preventDefault()))})}}})}();const{actions:l,callbacks:s,state:a}=r("activitypub/remote-reply",{state:{get remoteProfileUrl(){const{commentURL:e}=t();return a.template.replace("{uri}",encodeURIComponent(e))}},actions:{onReplyLinkKeydown(e){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),l.toggleModal(e))},copyToClipboard(){const o=t(),{i18n:r}=e();navigator.clipboard.writeText(o.commentURL).then(()=>{o.copyButtonText=r.copied,setTimeout(()=>{o.copyButtonText=r.copy},1e3)},e=>{console.error("Could not copy text: ",e)})},updateRemoteProfile(e){const o=t();o.remoteProfile=e.target.value,o.isError=!1,o.errorMessage=""},onInputKeydown(e){if("Enter"===e.key)return e.preventDefault(),l.submitRemoteProfile()},*submitRemoteProfile(){const o=t(),{namespace:r,i18n:i}=e(),c=o.remoteProfile.trim();if(!c)return o.isError=!0,void(o.errorMessage=i.emptyProfileError);if(!s.isHandle(c)&&!s.isUrl(c))return o.isError=!0,void(o.errorMessage=i.invalidProfileError);o.isLoading=!0,o.isError=!1,o.errorMessage="";const d=`/${r}/comments/${o.commentId}/remote-reply?resource=${encodeURIComponent(c)}`;try{const{template:e,url:t}=yield n({path:d});o.isLoading=!1,window.open(t,"_blank"),l.closeModal(),o.shouldSaveProfile&&(s.setStore({profileURL:c,template:e}),Object.assign(a,{hasRemoteUser:!0,profileURL:c,template:e}))}catch(e){console.error("Error submitting profile:",e),o.isLoading=!1,o.isError=!0,o.errorMessage=e.message||i.genericError}},toggleRememberProfile(){const e=t();e.shouldSaveProfile=!e.shouldSaveProfile},deleteRemoteUser(){s.deleteStore(),a.hasRemoteUser=!1,a.profileURL="",a.template=""}},callbacks:{storageKey:"fediverse-remote-user",init(){const{profileURL:e,template:t}=s.getStore();e&&t&&Object.assign(a,{hasRemoteUser:!0,profileURL:e,template:t})},getStore(){const e=localStorage.getItem(s.storageKey);return e?JSON.parse(e):{}},setStore(e){localStorage.setItem(s.storageKey,JSON.stringify(e))},deleteStore(){localStorage.removeItem(s.storageKey)},isHandle(e){const t=e.replace(/^@/,"").split("@");return 2===t.length&&s.isUrl(`https://${t[1]}`)},isUrl(e){try{return new URL(e),!0}catch(e){return!1}}}})}},s={};function a(e){var t=s[e];if(void 0!==t)return t.exports;var o=s[e]={exports:{}};return l[e](o,o.exports,a),o.exports}a.m=l,n=[],a.O=(e,t,o,r)=>{if(!t){var l=1/0;for(d=0;d=r)&&Object.keys(a.O).every(e=>a.O[e](t[i]))?t.splice(i--,1):(s=!1,r0&&n[d-1][2]>r;d--)n[d]=n[d-1];n[d]=[t,o,r]},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i,c=a;export{c as __webpack_require__};i={466:0,354:0},a.C=e=>{var t,o,{__webpack_esm_ids__:r,__webpack_esm_modules__:n,__webpack_esm_runtime__:l}=e,s=0;for(t in n)a.o(n,t)&&(a.m[t]=n[t]);for(l&&l(a);s0===i[e];var d=a.O(void 0,[354],()=>a(764));d=a.O(d); \ No newline at end of file diff --git a/build/reply-intent/plugin.asset.php b/build/reply-intent/plugin.asset.php index 72bbe9776..2bb3bb5fa 100644 --- a/build/reply-intent/plugin.asset.php +++ b/build/reply-intent/plugin.asset.php @@ -1 +1 @@ - array('wp-block-editor', 'wp-blocks', 'wp-data', 'wp-element', 'wp-plugins'), 'version' => 'f65a7269b5abb57d3e73'); + array('wp-block-editor', 'wp-blocks', 'wp-data', 'wp-element', 'wp-plugins'), 'version' => 'ee563d746b20aabb037a'); diff --git a/build/reply-intent/plugin.js b/build/reply-intent/plugin.js index b4a7e9936..b0183a39b 100644 --- a/build/reply-intent/plugin.js +++ b/build/reply-intent/plugin.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.plugins,t=window.wp.blocks,i=window.wp.data,n=window.wp.blockEditor,o=window.wp.element;let r=!1;(0,e.registerPlugin)("activitypub-reply-intent",{render:()=>((0,o.useEffect)((()=>{if(r)return;const e=new URLSearchParams(window.location.search).get("in_reply_to");e&&!r&&setTimeout((()=>{const o=(0,t.createBlock)("activitypub/reply",{url:e,embedPost:!0}),r=(0,i.dispatch)(n.store);r.insertBlock(o),r.insertAfterBlock(o.clientId)}),200),r=!0})),null)})})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.plugins,t=window.wp.blocks,i=window.wp.data,n=window.wp.blockEditor,o=window.wp.element;let r=!1;(0,e.registerPlugin)("activitypub-reply-intent",{render:()=>((0,o.useEffect)(()=>{if(r)return;const e=new URLSearchParams(window.location.search).get("in_reply_to");e&&!r&&setTimeout(()=>{const o=(0,t.createBlock)("activitypub/reply",{url:e,embedPost:!0}),r=(0,i.dispatch)(n.store);r.insertBlock(o),r.insertAfterBlock(o.clientId)},200),r=!0}),null)})})(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5d835a91c..933fab8d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -50,15 +51,17 @@ "version": "0.4.15", "resolved": "https://registry.npmjs.org/@ariakit/core/-/core-0.4.15.tgz", "integrity": "sha512-vvxmZvkNhiisKM+Y1TbGMUfVVchV/sWu9F0xw0RYADXcimWPK31dd9JnIZs/OQ5pwAryAHmERHwuGQVESkSjwQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ariakit/react": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.17.tgz", - "integrity": "sha512-HQaIboE2axtlncJz1hRTaiQfJ1GGjhdtNcAnPwdjvl2RybfmlHowIB+HTVBp36LzroKPs/M4hPCxk7XTaqRZGg==", + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/@ariakit/react/-/react-0.4.18.tgz", + "integrity": "sha512-r38DFvdv6JzjC/8mHekTaJEXO6hmx+YPIiyjq9oL7DckLmqGkAKbFrmQd2CeKZZ1c372DDVw7lLhYjj/VYCBZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@ariakit/react-core": "0.4.17" + "@ariakit/react-core": "0.4.18" }, "funding": { "type": "opencollective", @@ -70,10 +73,11 @@ } }, "node_modules/@ariakit/react-core": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.17.tgz", - "integrity": "sha512-kFF6n+gC/5CRQIyaMTFoBPio2xUe0k9rZhMNdUobWRmc/twfeLVkODx+8UVYaNyKilTge8G0JFqwvFKku/jKEw==", + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.4.18.tgz", + "integrity": "sha512-wHtojXF7KPRwGTSbPg50l203Qngg2aGYCzCut+mYEwe3S0ZzuYVpiY+2Yh15HssnQ/S5yiDGRL4q94UEXsyO+w==", "dev": true, + "license": "MIT", "dependencies": { "@ariakit/core": "0.4.15", "@floating-ui/dom": "^1.0.0", @@ -89,6 +93,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -99,30 +104,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", - "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", - "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helpers": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -141,7 +148,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/eslint-parser": { "version": "7.25.7", @@ -163,15 +171,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.1", - "@babel/types": "^7.27.1", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -179,12 +188,13 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", - "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -195,6 +205,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", @@ -207,17 +218,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "engines": { @@ -232,6 +244,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", @@ -245,26 +258,38 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -278,6 +303,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -287,14 +313,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", - "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -308,6 +335,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" }, @@ -320,6 +348,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -329,6 +358,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", @@ -346,6 +376,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", @@ -363,6 +394,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -376,6 +408,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -385,6 +418,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -394,44 +428,48 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", - "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", - "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.28.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -445,6 +483,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" @@ -461,6 +500,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -476,6 +516,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -491,6 +532,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", @@ -504,13 +546,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -524,6 +567,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -586,37 +630,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -632,6 +651,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -673,6 +693,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -798,6 +819,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -813,6 +835,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -829,6 +852,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -840,14 +864,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", - "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -861,6 +886,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -878,6 +904,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -889,10 +916,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz", - "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", + "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -908,6 +936,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -920,12 +949,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -936,17 +966,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -960,6 +991,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/template": "^7.27.1" @@ -972,12 +1004,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz", - "integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -991,6 +1025,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1007,6 +1042,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1022,6 +1058,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1038,6 +1075,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1048,11 +1086,29 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1068,6 +1124,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1083,6 +1140,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -1099,6 +1157,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1116,6 +1175,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1131,6 +1191,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1146,6 +1207,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1161,6 +1223,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1176,6 +1239,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1192,6 +1256,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1208,6 +1273,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1226,6 +1292,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1242,6 +1309,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1258,6 +1326,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1273,6 +1342,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1288,6 +1358,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1299,15 +1370,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz", - "integrity": "sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1" + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1321,6 +1394,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" @@ -1337,6 +1411,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1352,6 +1427,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -1364,10 +1440,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1383,6 +1460,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1399,6 +1477,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -1416,6 +1495,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1431,6 +1511,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1442,10 +1523,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", - "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1461,6 +1543,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-module-imports": "^7.27.1", @@ -1480,6 +1563,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, @@ -1495,6 +1579,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1507,10 +1592,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", - "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1526,6 +1612,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1542,6 +1629,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1592,6 +1680,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1607,6 +1696,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -1623,6 +1713,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1638,6 +1729,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1653,6 +1745,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1664,12 +1757,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", - "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", @@ -1687,6 +1781,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1702,6 +1797,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1718,6 +1814,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1734,6 +1831,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1746,12 +1844,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", - "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -1759,25 +1858,26 @@ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", "@babel/plugin-transform-exponentiation-operator": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", @@ -1794,15 +1894,15 @@ "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1815,10 +1915,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@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", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -1833,6 +1933,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1847,6 +1948,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -1867,6 +1969,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -1882,13 +1985,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", - "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1898,6 +1999,7 @@ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", @@ -1908,18 +2010,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.1", - "@babel/parser": "^7.27.1", - "@babel/template": "^7.27.1", - "@babel/types": "^7.27.1", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" @@ -1946,26 +2049,67 @@ "dev": true, "license": "MIT" }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "node_modules/@cacheable/memoize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cacheable/memoize/-/memoize-2.0.3.tgz", + "integrity": "sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { + "dependencies": { + "@cacheable/utils": "^2.0.3" + } + }, + "node_modules/@cacheable/memory": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.3.tgz", + "integrity": "sha512-R3UKy/CKOyb1LZG/VRCTMcpiMDyLH7SH3JrraRdK6kf3GweWCOU3sgvE13W3TiDRbxnDKylzKJvhUAvWl9LQOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memoize": "^2.0.3", + "@cacheable/utils": "^2.0.3", + "@keyv/bigmap": "^1.0.2", + "hookified": "^1.12.1", + "keyv": "^5.5.3" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.3.tgz", + "integrity": "sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-m7Rce68cMHlAUjvWBy9Ru1Nmw5gU0SjGGtQDdhpe6E0xnbcvrIY0Epy//JU1VYYBUTzrG9jvgmTauULGKzOkWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, @@ -2014,16 +2158,18 @@ } }, "node_modules/@date-fns/tz": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.2.0.tgz", - "integrity": "sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "dev": true, + "license": "MIT" }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -2044,6 +2190,7 @@ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", @@ -2063,6 +2210,7 @@ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "dev": true, + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", @@ -2076,6 +2224,7 @@ "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.13.5.tgz", "integrity": "sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==", "dev": true, + "license": "MIT", "dependencies": { "@emotion/babel-plugin": "^11.13.5", "@emotion/cache": "^11.13.5", @@ -2088,13 +2237,15 @@ "version": "0.9.2", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", - "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", "dev": true, + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.9.0" } @@ -2103,13 +2254,15 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emotion/react": { "version": "11.14.0", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2134,6 +2287,7 @@ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", "dev": true, + "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", @@ -2146,13 +2300,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emotion/styled": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", - "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2175,13 +2331,15 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", "dev": true, + "license": "MIT", "peerDependencies": { "react": ">=16.8.0" } @@ -2190,13 +2348,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emotion/weak-memoize": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@es-joy/jsdoccomment": { "version": "0.41.0", @@ -2297,22 +2457,6 @@ "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2339,19 +2483,6 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "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==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/js": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", @@ -2363,22 +2494,24 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", - "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", "dev": true, + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.9" + "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", - "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", "dev": true, + "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.0", - "@floating-ui/utils": "^0.2.9" + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/react-dom": { @@ -2386,6 +2519,7 @@ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", "dev": true, + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.6.1" }, @@ -2395,10 +2529,11 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", - "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", - "dev": true + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "dev": true, + "license": "MIT" }, "node_modules/@formatjs/ecma402-abstract": { "version": "2.3.4", @@ -2456,21 +2591,58 @@ "tslib": "^2.8.0" } }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@hapi/tlds": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.3.tgz", + "integrity": "sha512-QIvUMB5VZ8HMLZF9A2oWr3AFM430QC8oGd0L35y2jHpuW6bIIca6x/xL7zUf4J7L9WJ3qjz+iJII8ncaeMbpSg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" } }, "node_modules/@humanwhocodes/config-array": { @@ -2535,16 +2707,27 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@inquirer/ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", + "integrity": "sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/checkbox": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.8.tgz", - "integrity": "sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.4.tgz", + "integrity": "sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -2560,13 +2743,14 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.12.tgz", - "integrity": "sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==", + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.18.tgz", + "integrity": "sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7" + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" }, "engines": { "node": ">=18" @@ -2581,15 +2765,15 @@ } }, "node_modules/@inquirer/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.0.tgz", - "integrity": "sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.2.tgz", + "integrity": "sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==", "dev": true, "license": "MIT", "dependencies": { + "@inquirer/ansi": "^1.0.0", "@inquirer/figures": "^1.0.13", "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", @@ -2609,14 +2793,14 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.18.tgz", - "integrity": "sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w==", + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.20.tgz", + "integrity": "sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.2.0", - "@inquirer/external-editor": "^1.0.1", + "@inquirer/core": "^10.2.2", + "@inquirer/external-editor": "^1.0.2", "@inquirer/type": "^3.0.8" }, "engines": { @@ -2632,13 +2816,14 @@ } }, "node_modules/@inquirer/expand": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.15.tgz", - "integrity": "sha512-4Y+pbr/U9Qcvf+N/goHzPEXiHH8680lM3Dr3Y9h9FFw4gHS+zVpbj8LfbKWIb/jayIB4aSO4pWiBTrBYWkvi5A==", + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.20.tgz", + "integrity": "sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -2654,14 +2839,14 @@ } }, "node_modules/@inquirer/external-editor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", - "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", "dev": true, "license": "MIT", "dependencies": { "chardet": "^2.1.0", - "iconv-lite": "^0.6.3" + "iconv-lite": "^0.7.0" }, "engines": { "node": ">=18" @@ -2675,19 +2860,6 @@ } } }, - "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@inquirer/figures": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", @@ -2699,13 +2871,14 @@ } }, "node_modules/@inquirer/input": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.12.tgz", - "integrity": "sha512-xJ6PFZpDjC+tC1P8ImGprgcsrzQRsUh9aH3IZixm1lAZFK49UGHxM3ltFfuInN2kPYNfyoPRh+tU4ftsjPLKqQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.4.tgz", + "integrity": "sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7" + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" }, "engines": { "node": ">=18" @@ -2720,13 +2893,14 @@ } }, "node_modules/@inquirer/number": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.15.tgz", - "integrity": "sha512-xWg+iYfqdhRiM55MvqiTCleHzszpoigUpN5+t1OMcRkJrUrw7va3AzXaxvS+Ak7Gny0j2mFSTv2JJj8sMtbV2g==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.20.tgz", + "integrity": "sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7" + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" }, "engines": { "node": ">=18" @@ -2741,14 +2915,15 @@ } }, "node_modules/@inquirer/password": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.15.tgz", - "integrity": "sha512-75CT2p43DGEnfGTaqFpbDC2p2EEMrq0S+IRrf9iJvYreMy5mAWj087+mdKyLHapUEPLjN10mNvABpGbk8Wdraw==", + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.20.tgz", + "integrity": "sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2" + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" }, "engines": { "node": ">=18" @@ -2763,21 +2938,22 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.5.3.tgz", - "integrity": "sha512-8YL0WiV7J86hVAxrh3fE5mDCzcTDe1670unmJRz6ArDgN+DBK1a0+rbnNWp4DUB5rPMwqD5ZP6YHl9KK1mbZRg==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.6.tgz", + "integrity": "sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.1.8", - "@inquirer/confirm": "^5.1.12", - "@inquirer/editor": "^4.2.13", - "@inquirer/expand": "^4.0.15", - "@inquirer/input": "^4.1.12", - "@inquirer/number": "^3.0.15", - "@inquirer/password": "^4.0.15", - "@inquirer/rawlist": "^4.1.3", - "@inquirer/search": "^3.0.15", - "@inquirer/select": "^4.2.3" + "@inquirer/checkbox": "^4.2.4", + "@inquirer/confirm": "^5.1.18", + "@inquirer/editor": "^4.2.20", + "@inquirer/expand": "^4.0.20", + "@inquirer/input": "^4.2.4", + "@inquirer/number": "^3.0.20", + "@inquirer/password": "^4.0.20", + "@inquirer/rawlist": "^4.1.8", + "@inquirer/search": "^3.1.3", + "@inquirer/select": "^4.3.4" }, "engines": { "node": ">=18" @@ -2792,13 +2968,14 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.3.tgz", - "integrity": "sha512-7XrV//6kwYumNDSsvJIPeAqa8+p7GJh7H5kRuxirct2cgOcSWwwNGoXDRgpNFbY/MG2vQ4ccIWCi8+IXXyFMZA==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.8.tgz", + "integrity": "sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/type": "^3.0.7", + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -2814,14 +2991,15 @@ } }, "node_modules/@inquirer/search": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.15.tgz", - "integrity": "sha512-YBMwPxYBrADqyvP4nNItpwkBnGGglAvCLVW8u4pRmmvOsHUtCAUIMbUrLX5B3tFL1/WsLGdQ2HNzkqswMs5Uaw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.3.tgz", + "integrity": "sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -2837,15 +3015,16 @@ } }, "node_modules/@inquirer/select": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.3.tgz", - "integrity": "sha512-OAGhXU0Cvh0PhLz9xTF/kx6g6x+sP+PcyTiLvCrewI99P3BBeexD+VbuwkNDvqGkk3y2h5ZiWLeRP7BFlhkUDg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.4.tgz", + "integrity": "sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==", "dev": true, + "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.13", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -2883,6 +3062,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2896,10 +3076,11 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2908,10 +3089,11 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2924,6 +3106,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2937,10 +3120,11 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2956,6 +3140,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -3071,11 +3256,40 @@ } } }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -3118,6 +3332,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3225,6 +3440,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3318,6 +3534,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3331,17 +3548,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -3349,45 +3563,53 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@keyv/bigmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.0.2.tgz", + "integrity": "sha512-KR03xkEZlAZNF4IxXgVXb+uNIVNvwdh8UwI0cnc7WI6a+aQcDp8GL80qVfeB4E5NpsKJzou5jU0r6yLSSbMOtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.12.1" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/@keyv/serialize": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", @@ -3400,6 +3622,7 @@ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1" } @@ -3408,13 +3631,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", @@ -3431,6 +3656,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3444,6 +3670,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -3453,6 +3680,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4386,6 +4614,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -4405,14 +4634,14 @@ } }, "node_modules/@playwright/test": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", - "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", + "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", "dev": true, "license": "Apache-2.0", "peer": true, "dependencies": { - "playwright": "1.55.0" + "playwright": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -4422,10 +4651,11 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.16.tgz", - "integrity": "sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.17.tgz", + "integrity": "sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-html": "^0.0.9", "core-js-pure": "^3.23.3", @@ -4470,25 +4700,28 @@ } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@preact/signals": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-1.3.2.tgz", "integrity": "sha512-naxcJgUJ6BTOROJ7C3QML7KvwKwCXQJYTc5L/b0eEsdYgPB6SxwoQ1vDGcS0Q7GVjAenVq/tXrybVdFShHYZWg==", "dev": true, + "license": "MIT", "dependencies": { "@preact/signals-core": "^1.7.0" }, @@ -4501,10 +4734,11 @@ } }, "node_modules/@preact/signals-core": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.8.0.tgz", - "integrity": "sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.12.1.tgz", + "integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -4581,16 +4815,18 @@ } }, "node_modules/@radix-ui/primitive": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", - "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "dev": true, + "license": "MIT" }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4606,6 +4842,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4617,20 +4854,21 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", - "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", "dev": true, + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.10", - "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", @@ -4653,12 +4891,13 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", - "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "dev": true, + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.2", + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", @@ -4680,10 +4919,11 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", - "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4699,6 +4939,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", @@ -4724,6 +4965,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, @@ -4742,6 +4984,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -4762,10 +5005,11 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", - "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -4790,6 +5034,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.2.3" }, @@ -4813,6 +5058,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -4831,6 +5077,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4846,6 +5093,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" @@ -4865,6 +5113,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, @@ -4883,6 +5132,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, @@ -4901,6 +5151,7 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -4916,6 +5167,7 @@ "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz", "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==", "dev": true, + "license": "MIT", "dependencies": { "@react-spring/shared": "~9.7.5", "@react-spring/types": "~9.7.5" @@ -4929,6 +5181,7 @@ "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz", "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==", "dev": true, + "license": "MIT", "dependencies": { "@react-spring/animated": "~9.7.5", "@react-spring/shared": "~9.7.5", @@ -4946,13 +5199,15 @@ "version": "9.7.5", "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz", "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@react-spring/shared": { "version": "9.7.5", "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz", "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==", "dev": true, + "license": "MIT", "dependencies": { "@react-spring/rafz": "~9.7.5", "@react-spring/types": "~9.7.5" @@ -4965,13 +5220,15 @@ "version": "9.7.5", "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz", "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@react-spring/web": { "version": "9.7.5", "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz", "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==", "dev": true, + "license": "MIT", "dependencies": { "@react-spring/animated": "~9.7.5", "@react-spring/core": "~9.7.5", @@ -5091,41 +5348,19 @@ "@opentelemetry/semantic-conventions": "^1.34.0" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5138,6 +5373,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -5147,10 +5383,18 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@stylistic/stylelint-plugin": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.3.tgz", @@ -5179,6 +5423,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5195,6 +5440,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5211,6 +5457,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5227,6 +5474,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5243,6 +5491,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5259,6 +5508,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5275,6 +5525,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -5291,6 +5542,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -5307,6 +5559,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", "dev": true, + "license": "MIT", "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", @@ -5333,6 +5586,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5353,6 +5607,7 @@ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.21.3", "entities": "^4.4.0" @@ -5370,6 +5625,7 @@ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5392,6 +5648,7 @@ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^8.1.3", "deepmerge": "^4.3.1", @@ -5413,6 +5670,7 @@ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", "@babel/plugin-transform-react-constant-elements": "^7.21.3", @@ -5436,6 +5694,7 @@ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -5448,6 +5707,7 @@ "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz", "integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==", "dev": true, + "license": "MIT", "dependencies": { "@tannin/evaluate": "^1.2.0", "@tannin/postfix": "^1.1.0" @@ -5457,13 +5717,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz", "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tannin/plural-forms": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz", "integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==", "dev": true, + "license": "MIT", "dependencies": { "@tannin/compile": "^1.1.0" } @@ -5472,7 +5734,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz", "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tannin/sprintf": { "version": "1.3.3", @@ -5486,6 +5749,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -5501,51 +5765,6 @@ "node": ">=18" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "peer": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/@testing-library/dom/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "peer": true - }, "node_modules/@testing-library/react": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", @@ -5579,6 +5798,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12", "npm": ">=6" @@ -5592,6 +5812,7 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -5608,6 +5829,7 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } @@ -5617,6 +5839,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/babel__core": { @@ -5665,10 +5888,11 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -5679,6 +5903,7 @@ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5688,6 +5913,7 @@ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -5700,6 +5926,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5709,6 +5936,7 @@ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -5719,6 +5947,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -5729,22 +5958,25 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.22", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz", - "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -5753,10 +5985,11 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", + "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -5769,6 +6002,7 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -5786,29 +6020,40 @@ "@types/node": "*" } }, + "node_modules/@types/gradient-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-1.1.0.tgz", + "integrity": "sha512-SaEcbgQscHtGJ1QL+ajgDTmmqU2f6T+00jZRcFlVHUW2Asivc84LNUev/UQFyu117AsdyrtI+qpwLvgjJXJxmw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/highlight-words-core": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/highlight-words-core/-/highlight-words-core-1.2.1.tgz", "integrity": "sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/http-proxy": { "version": "1.17.16", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5817,13 +6062,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -5833,6 +6080,7 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -5842,6 +6090,7 @@ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", @@ -5852,7 +6101,8 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -5866,6 +6116,7 @@ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5874,7 +6125,8 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", @@ -5887,7 +6139,8 @@ "version": "1.6.15", "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.15.tgz", "integrity": "sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mysql": { "version": "2.15.26", @@ -5900,19 +6153,21 @@ } }, "node_modules/@types/node": { - "version": "22.15.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz", - "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==", + "version": "24.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.6.2.tgz", + "integrity": "sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.13.0" } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5928,7 +6183,8 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/pg": { "version": "8.6.1", @@ -5953,28 +6209,32 @@ } }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "dev": true + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.22", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.22.tgz", - "integrity": "sha512-vUhG0YmQZ7kL/tmKLrD3g5zXbXXreZXB3pmROW8bg3CnLnpjkRVwUlLne7Ufa2r9yJ8+/6B73RzhAek5TBKh2Q==", + "version": "18.3.25", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.25.tgz", + "integrity": "sha512-oSVZmGtDPmRZtVDqvdKUi/qgCsWp5IDY29wp8na8Bj4B3cc99hfNzvNhlMkVVxctkAOGUA3Km7MMpBHAnWfcIA==", "dev": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -5985,6 +6245,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "^18.0.0" } @@ -5994,6 +6255,7 @@ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -6002,7 +6264,8 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.7.1", @@ -6012,10 +6275,11 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -6026,15 +6290,17 @@ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -6063,31 +6329,17 @@ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/source-list-map": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", - "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/tapable": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", - "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", "dev": true, - "optional": true, - "peer": true + "license": "MIT" }, "node_modules/@types/tedious": { "version": "4.0.14", @@ -6103,95 +6355,25 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/uglify-js": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", - "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, - "optional": true, - "peer": true, + "license": "MIT", "dependencies": { - "source-map": "^0.6.1" + "@types/node": "*" } }, - "node_modules/@types/uglify-js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/webpack": { - "version": "4.41.40", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.40.tgz", - "integrity": "sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -6200,7 +6382,8 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", @@ -6474,13 +6657,15 @@ "version": "10.3.1", "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz", "integrity": "sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@use-gesture/react": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.1.tgz", "integrity": "sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==", "dev": true, + "license": "MIT", "dependencies": { "@use-gesture/core": "10.3.1" }, @@ -6493,6 +6678,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -6502,25 +6688,29 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -6531,13 +6721,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6550,6 +6742,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -6559,6 +6752,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -6567,13 +6761,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6590,6 +6786,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -6603,6 +6800,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6615,6 +6813,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -6629,6 +6828,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -6639,6 +6839,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -6652,6 +6853,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -6665,6 +6867,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -6694,6 +6897,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/a11y/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/api-fetch": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.32.0.tgz", @@ -6710,6 +6926,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/api-fetch/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/autop": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-4.32.0.tgz", @@ -6724,10 +6953,23 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/autop/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/babel-preset-default": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.30.0.tgz", - "integrity": "sha512-DUEAseIg3Xqa4MroaFQEob4TYTGJv0zKRLsDrLHAgQCTtC4PcvUqU0gM7JZjG3zo20G9R5YCBNzx1353qd1t7Q==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.32.0.tgz", + "integrity": "sha512-K6sbRuLpLQWDnIhg0FRWuHOV68BMsrPrNeMNt1TcFDOMCqozI/mnfwCbejfIO7ZPqJtbfucnh1OQ9EkMWPibew==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -6737,8 +6979,8 @@ "@babel/preset-env": "7.25.7", "@babel/preset-typescript": "7.25.7", "@babel/runtime": "7.25.7", - "@wordpress/browserslist-config": "^6.30.0", - "@wordpress/warning": "^3.30.0", + "@wordpress/browserslist-config": "^6.32.0", + "@wordpress/warning": "^3.32.0", "browserslist": "^4.21.10", "core-js": "^3.31.0", "react": "^18.3.0" @@ -6748,37 +6990,6 @@ "npm": ">=8.19.2" } }, - "node_modules/@wordpress/babel-preset-default/node_modules/@babel/core": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", - "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, "node_modules/@wordpress/babel-preset-default/node_modules/@babel/plugin-transform-react-jsx": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", @@ -6897,6 +7108,46 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-env/node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-env/node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@wordpress/babel-preset-default/node_modules/@babel/preset-typescript": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz", @@ -6917,27 +7168,19 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@wordpress/babel-preset-default/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "node_modules/@wordpress/babel-preset-default/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "regenerator-runtime": "^0.14.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@wordpress/babel-preset-default/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, "node_modules/@wordpress/base-styles": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.8.0.tgz", @@ -6963,6 +7206,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/blob/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/block-editor": { "version": "15.5.0", "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-15.5.0.tgz", @@ -7030,6 +7286,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/block-editor/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/block-library": { "version": "9.32.0", "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.32.0.tgz", @@ -7090,6 +7359,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/block-library/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/block-serialization-default-parser": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.32.0.tgz", @@ -7104,12 +7386,25 @@ "npm": ">=8.19.2" } }, - "node_modules/@wordpress/blocks": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.5.0.tgz", - "integrity": "sha512-RxJGBtjgyjDd79H4TEbGfy6N6JU1KLMyWzgjzrmScoZghFOBeWI4qHvqud9pr01A3i9IGhQ72j0QvvgQdtWhhA==", - "dev": true, - "license": "GPL-2.0-or-later", + "node_modules/@wordpress/block-serialization-default-parser/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@wordpress/blocks": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.5.0.tgz", + "integrity": "sha512-RxJGBtjgyjDd79H4TEbGfy6N6JU1KLMyWzgjzrmScoZghFOBeWI4qHvqud9pr01A3i9IGhQ72j0QvvgQdtWhhA==", + "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "7.25.7", "@wordpress/autop": "^4.32.0", @@ -7147,10 +7442,23 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/blocks/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/browserslist-config": { - "version": "6.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.30.0.tgz", - "integrity": "sha512-CjirkPIkMf72VQcKmhmQZUJGHHFEt80ITZVgnxEtyswWA6QPRXIwFhQOAElmfhWg2wS6pCncyg6k7DfgYX3bOg==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.32.0.tgz", + "integrity": "sha512-8NemosyPrey1yswd6LH8vX9mcRF6Xmqt2mKUCspnmEX4KvayyezmtJPh2EQo3GfySVHGWePzb0yfMYEqDdsC0Q==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -7185,6 +7493,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/commands/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/components": { "version": "30.5.0", "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-30.5.0.tgz", @@ -7248,20 +7569,17 @@ "react-dom": "^18.0.0" } }, - "node_modules/@wordpress/components/node_modules/@types/gradient-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-1.1.0.tgz", - "integrity": "sha512-SaEcbgQscHtGJ1QL+ajgDTmmqU2f6T+00jZRcFlVHUW2Asivc84LNUev/UQFyu117AsdyrtI+qpwLvgjJXJxmw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wordpress/components/node_modules/gradient-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/gradient-parser/-/gradient-parser-1.1.1.tgz", - "integrity": "sha512-Hu0YfNU+38EsTmnUfLXUKFMXq9yz7htGYpF4x+dlbBhUCvIvzLt0yVLT/gJRmvLKFJdqNFrz4eKkIUjIXSr7Tw==", + "node_modules/@wordpress/components/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, "node_modules/@wordpress/compose": { @@ -7293,6 +7611,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/compose/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/core-data": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.32.0.tgz", @@ -7332,6 +7663,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/core-data/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/data": { "version": "10.32.0", "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.32.0.tgz", @@ -7363,6 +7707,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/data/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/dataviews": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-9.1.0.tgz", @@ -7401,6 +7758,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/dataviews/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/dataviews/node_modules/date-fns": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", @@ -7429,10 +7799,23 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/date/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/dependency-extraction-webpack-plugin": { - "version": "6.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.30.0.tgz", - "integrity": "sha512-sms4yRJriS8vzlwbYHII/xqI64oSY5ALbfQy6HJBSCfLJCNxVOzC/2fCrhdV9ghd8nK3NMAJKhTCe09oMPCnIw==", + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.32.0.tgz", + "integrity": "sha512-05XLzLx+cTXgid6/qI6XzBclNvkLIi9F0oLAn4htL1ExIXLfc9yBSNcNkVVP7Tr5pmpMq0NUxfM58jqxxmFfCQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7468,6 +7851,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/deprecated/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/dom": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.32.0.tgz", @@ -7497,10 +7893,36 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/dom-ready/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@wordpress/dom/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/e2e-test-utils-playwright": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.30.0.tgz", - "integrity": "sha512-KN/q6359nlb+zh/eamQD0gBgi1616Px7v+03+Hz8HqKUPKozUab1ogxr6Ew751LCYGuh204eG7ImYVM6Aqta0Q==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.32.0.tgz", + "integrity": "sha512-w1hE7xDB06SQDfwtbggyU2xTyQ++GyU2wwEc648LL6OYLh7wlDuEzP/7XCrYbxA/GPGFDKCOL3uhU163F2N/Dw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7567,6 +7989,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/edit-post/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/editor": { "version": "14.32.0", "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.32.0.tgz", @@ -7631,6 +8066,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/editor/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/element": { "version": "6.32.0", "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-6.32.0.tgz", @@ -7652,6 +8100,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/element/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/env": { "version": "10.32.0", "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.32.0.tgz", @@ -7694,18 +8155,31 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/escape-html/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/eslint-plugin": { - "version": "22.16.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-22.16.0.tgz", - "integrity": "sha512-1z3rXq2uanCY0m2D1BgimeNGxZOZy87VPwzKRjaf2aPLw/ezoQckiaVGAKYKhbHLt6HFP2EkdKfuD3pmbTJ57g==", + "version": "22.18.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-22.18.0.tgz", + "integrity": "sha512-1w4bhax+vg3xFDXs/z2jNRaCO/kagpK0ZZ6PGWH5Anlp+e9MuzQHMbcU6Xpd/+ZU118z0rJeXDvjb3QgEfvEOg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/eslint-parser": "7.25.7", "@typescript-eslint/eslint-plugin": "^6.4.1", "@typescript-eslint/parser": "^6.4.1", - "@wordpress/babel-preset-default": "^8.30.0", - "@wordpress/prettier-config": "^4.30.0", + "@wordpress/babel-preset-default": "^8.32.0", + "@wordpress/prettier-config": "^4.32.0", "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", @@ -7755,35 +8229,6 @@ "node": ">=10" } }, - "node_modules/@wordpress/eslint-plugin/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wordpress/eslint-plugin/node_modules/type-fest": { - "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==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@wordpress/eslint-plugin/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -7838,24 +8283,23 @@ "react": "^18.0.0" } }, - "node_modules/@wordpress/hooks": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.32.0.tgz", - "integrity": "sha512-aXCLsuOQJiVJDrVKV4MjGYeU2Nv8+pg2KSAzANs7OGXIl714Q968t5qODJiJ6ADsng3FnQ0pATVYBGBTGlW6Gg==", + "node_modules/@wordpress/fields/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dev": true, - "license": "GPL-2.0-or-later", + "license": "MIT", "dependencies": { - "@babel/runtime": "7.25.7" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">=18.12.0", - "npm": ">=8.19.2" + "node": ">=6.9.0" } }, - "node_modules/@wordpress/html-entities": { + "node_modules/@wordpress/hooks": { "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.32.0.tgz", - "integrity": "sha512-IHHxBeMIQR7/+Fq27eWEzOuBi10guTRBNVZUrdk32ZyJL2ISpVYwMiHOwKBH6J/67ayBSon23gUEWBqUE6bC9g==", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.32.0.tgz", + "integrity": "sha512-aXCLsuOQJiVJDrVKV4MjGYeU2Nv8+pg2KSAzANs7OGXIl714Q968t5qODJiJ6ADsng3FnQ0pATVYBGBTGlW6Gg==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7866,8 +8310,48 @@ "npm": ">=8.19.2" } }, - "node_modules/@wordpress/i18n": { - "version": "6.5.0", + "node_modules/@wordpress/hooks/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@wordpress/html-entities": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.32.0.tgz", + "integrity": "sha512-IHHxBeMIQR7/+Fq27eWEzOuBi10guTRBNVZUrdk32ZyJL2ISpVYwMiHOwKBH6J/67ayBSon23gUEWBqUE6bC9g==", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@babel/runtime": "7.25.7" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/html-entities/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@wordpress/i18n": { + "version": "6.5.0", "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.5.0.tgz", "integrity": "sha512-VJ4QwkgKaVBk2+u6NYTMJ4jc/fave0Q2DAmoTN1AoSaHnK1Yuq9qJtBHAdkLUo7bBpRORBTl8OFFJTFLxgc9eA==", "dev": true, @@ -7888,6 +8372,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/i18n/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/icons": { "version": "10.32.0", "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.32.0.tgz", @@ -7904,6 +8401,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/icons/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/interactivity": { "version": "6.32.0", "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.32.0.tgz", @@ -7965,6 +8475,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/interface/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/is-shallow-equal": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.32.0.tgz", @@ -7979,10 +8502,23 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/is-shallow-equal/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/jest-console": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.30.0.tgz", - "integrity": "sha512-Vw7iBqsueb9jCy6RnnjixjLosm+fMi+3iMQDiBB5Pw/yUpr0PUBCR11oQCE/nO3wDl7OOA5Nq3v2qo/wxLBLMg==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-8.32.0.tgz", + "integrity": "sha512-Sq4Ss0gJNmLzpJ9K/5Nto/FTV5L7ALvmdfA7b8JpmuKh32CETN4uIGDSfqS2a5Pfcg4KepwnL6jF9790uM54QA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -7997,14 +8533,27 @@ "jest": ">=29" } }, + "node_modules/@wordpress/jest-console/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/jest-preset-default": { - "version": "12.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-12.30.0.tgz", - "integrity": "sha512-nxldSo9luQBfjIFF08hcVT1pEVABe213qBxYWCXMCx3+SPsENRF6pU/yoRb0i7nz6yrd/j5oD92EXXnbQoN8eA==", + "version": "12.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-12.32.0.tgz", + "integrity": "sha512-Y8X+0KCjUiB1MxxwridiY0Ku3iJVOTJSsutSReu+rM/hS/1azlBMctC0bqUyC0mQyBqPF0SNlpHjYdsAoVEznQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/jest-console": "^8.30.0", + "@wordpress/jest-console": "^8.32.0", "babel-jest": "29.7.0" }, "engines": { @@ -8036,6 +8585,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/keyboard-shortcuts/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/keycodes": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.32.0.tgz", @@ -8051,6 +8613,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/keycodes/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/media-utils": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.32.0.tgz", @@ -8070,6 +8645,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/media-utils/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/notices": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-5.32.0.tgz", @@ -8089,10 +8677,23 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/notices/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/npm-package-json-lint-config": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.30.0.tgz", - "integrity": "sha512-pJ5XMmj2Osk05/TFrCpf6l6VuxWDU837ISKW1bXAmBfpnLTlUuVUl6pTWbIE4gNZqb2faSBQSN3OPeQqt4RNJg==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-5.32.0.tgz", + "integrity": "sha512-X3D9g0m0OIM6FfdHfmyGENOZG53kc+i49WuHnDnC1gZWV5Ai0SD/CNfRcPZOYw7Ld9CScrM3kqXAKG7nd1fGFg==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -8135,6 +8736,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/patterns/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/plugins": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.32.0.tgz", @@ -8161,14 +8775,27 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/plugins/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/postcss-plugins-preset": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.30.0.tgz", - "integrity": "sha512-3mB+tqN9uIQ6h1SXtQUFowNeCv/Cy6vWsUBhPkgU3hj7LQrGbCAmMWefDAQeYHyG0lQfSrAD6jctZ2wZmNXwsQ==", + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.32.0.tgz", + "integrity": "sha512-cJGgp8Z3o8dKfUWQZtQ/gNceYwLQET1z7RqkOAaSI5O0lelGit8gqpWeA7qYyZb9K1kWwhz8GGVWUIsQhCo2sQ==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { - "@wordpress/base-styles": "^6.6.0", + "@wordpress/base-styles": "^6.8.0", "autoprefixer": "^10.4.20" }, "engines": { @@ -8207,10 +8834,23 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/preferences/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/prettier-config": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.31.0.tgz", - "integrity": "sha512-gEnLhuM27DFZIdDaftx32ZCdiklP0mvTNTYDULpJ00HQyq0sqTAJ9bjWYR9YSt+2pCfwFd4o721f9vT2fVYoTA==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.32.0.tgz", + "integrity": "sha512-fS4Z5hXewajLKxbMQY4rdq3fSpUnwHHfLWqOJHXlu3u4rjqVf0VMJsLsSsSM8tV78rU6x6dWIEugG6CnDygYjA==", "dev": true, "license": "GPL-2.0-or-later", "engines": { @@ -8240,6 +8880,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/primitives/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/priority-queue": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.32.0.tgz", @@ -8255,6 +8908,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/priority-queue/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/private-apis": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.32.0.tgz", @@ -8269,6 +8935,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/private-apis/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/redux-routine": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-5.32.0.tgz", @@ -8289,6 +8968,19 @@ "redux": ">=4" } }, + "node_modules/@wordpress/redux-routine/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/reusable-blocks": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.32.0.tgz", @@ -8318,6 +9010,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/reusable-blocks/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/rich-text": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.32.0.tgz", @@ -8345,6 +9050,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/rich-text/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/router": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-1.32.0.tgz", @@ -8368,26 +9086,39 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/router/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/scripts": { - "version": "30.23.0", - "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-30.23.0.tgz", - "integrity": "sha512-IVMv4GvSxZQuj/JybHMHA0BbScv2//tELUQSHMe7IHRxvaqzd8WDJgMfnwaqQWOmtw8d4739w7kAEo26kh6zWA==", + "version": "30.25.0", + "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-30.25.0.tgz", + "integrity": "sha512-sUL6R4aYzdvrg8V7W49RxLsLavv7ZuQ4/6gIb/ZCYZDwhzT4feqdMXyViwmlyaQMIxTMJy93zD+7jFrUGy07Sw==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@babel/core": "7.25.7", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", "@svgr/webpack": "^8.0.1", - "@wordpress/babel-preset-default": "^8.30.0", - "@wordpress/browserslist-config": "^6.30.0", - "@wordpress/dependency-extraction-webpack-plugin": "^6.30.0", - "@wordpress/e2e-test-utils-playwright": "^1.30.0", - "@wordpress/eslint-plugin": "^22.16.0", - "@wordpress/jest-preset-default": "^12.30.0", - "@wordpress/npm-package-json-lint-config": "^5.30.0", - "@wordpress/postcss-plugins-preset": "^5.30.0", - "@wordpress/prettier-config": "^4.30.0", - "@wordpress/stylelint-config": "^23.22.0", + "@wordpress/babel-preset-default": "^8.32.0", + "@wordpress/browserslist-config": "^6.32.0", + "@wordpress/dependency-extraction-webpack-plugin": "^6.32.0", + "@wordpress/e2e-test-utils-playwright": "^1.32.0", + "@wordpress/eslint-plugin": "^22.18.0", + "@wordpress/jest-preset-default": "^12.32.0", + "@wordpress/npm-package-json-lint-config": "^5.32.0", + "@wordpress/postcss-plugins-preset": "^5.32.0", + "@wordpress/prettier-config": "^4.32.0", + "@wordpress/stylelint-config": "^23.24.0", "adm-zip": "^0.5.9", "babel-jest": "29.7.0", "babel-loader": "9.2.1", @@ -8454,44 +9185,6 @@ } } }, - "node_modules/@wordpress/scripts/node_modules/@babel/core": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", - "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@wordpress/scripts/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, "node_modules/@wordpress/server-side-render": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-6.8.0.tgz", @@ -8519,6 +9212,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/server-side-render/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/shortcode": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-4.32.0.tgz", @@ -8534,6 +9240,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/shortcode/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/style-engine": { "version": "2.32.0", "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-2.32.0.tgz", @@ -8549,10 +9268,23 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/style-engine/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/stylelint-config": { - "version": "23.22.0", - "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-23.22.0.tgz", - "integrity": "sha512-d1aEVn6jbMFFJh3SqpGKoNsnm0DcYD6TwgzLLlIL11kslyFEn6mfiKJVeVNIgWQe7sBDEtUkE7h4qEOSDbxO8A==", + "version": "23.24.0", + "resolved": "https://registry.npmjs.org/@wordpress/stylelint-config/-/stylelint-config-23.24.0.tgz", + "integrity": "sha512-qF0zRv/fLK29/jEjQnY0xy1hrP5Cv6ReG10QkVAtSlaBvu07Hu+RWNIVrSznwlrbzzP+2JM61lO2oAeX/3LD+g==", "dev": true, "license": "MIT", "dependencies": { @@ -8592,18 +9324,44 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/sync/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/token-list": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.32.0.tgz", "integrity": "sha512-FgA06HzE0dESSXAQIgzKfLa9Z2Qv1Gv4Blcskyko7wNTcQfPq53oByvCiA0aMFh/LmKHNIa2FR1vn3Y3ck/Ewg==", "dev": true, - "license": "GPL-2.0-or-later", + "license": "GPL-2.0-or-later", + "dependencies": { + "@babel/runtime": "7.25.7" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/@wordpress/token-list/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "7.25.7" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">=18.12.0", - "npm": ">=8.19.2" + "node": ">=6.9.0" } }, "node_modules/@wordpress/undo-manager": { @@ -8621,6 +9379,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/undo-manager/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/upload-media": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/@wordpress/upload-media/-/upload-media-0.17.0.tgz", @@ -8649,6 +9420,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/upload-media/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/url": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.32.0.tgz", @@ -8664,6 +9448,19 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/url/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/viewport": { "version": "6.32.0", "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.32.0.tgz", @@ -8684,6 +9481,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/viewport/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/warning": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.32.0.tgz", @@ -8725,6 +9535,19 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/widgets/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@wordpress/wordcount": { "version": "4.32.0", "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.32.0.tgz", @@ -8739,30 +9562,47 @@ "npm": ">=8.19.2" } }, + "node_modules/@wordpress/wordcount/node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -8776,15 +9616,17 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -8797,6 +9639,7 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.1.0", "acorn-walk": "^8.0.2" @@ -8812,6 +9655,19 @@ "acorn": "^8" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -8827,6 +9683,7 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -8839,6 +9696,7 @@ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0" } @@ -8848,6 +9706,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -8860,6 +9719,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8886,6 +9746,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -8903,6 +9764,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -8918,13 +9780,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -8944,6 +9808,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -8954,6 +9819,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", @@ -8962,6 +9840,7 @@ "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -8974,6 +9853,7 @@ "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -8983,6 +9863,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8992,6 +9873,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9007,6 +9889,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -9030,21 +9913,17 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, "node_modules/aria-hidden": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -9053,13 +9932,14 @@ } }, "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" + "peer": true, + "dependencies": { + "dequal": "^2.0.3" } }, "node_modules/arr-union": { @@ -9067,6 +9947,7 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9076,6 +9957,7 @@ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" @@ -9091,7 +9973,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.9", @@ -9300,7 +10183,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/atomically": { "version": "2.0.3", @@ -9354,13 +10238,15 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.4.tgz", "integrity": "sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -9382,9 +10268,9 @@ } }, "node_modules/axios": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz", - "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "dev": true, "license": "MIT", "dependencies": { @@ -9481,6 +10367,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -9496,6 +10383,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -9512,18 +10400,20 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -9531,25 +10421,27 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -9603,20 +10495,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bare-events": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.1.tgz", - "integrity": "sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", + "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", "dev": true, - "license": "Apache-2.0", - "optional": true + "license": "Apache-2.0" }, "node_modules/bare-fs": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.4.tgz", - "integrity": "sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.5.tgz", + "integrity": "sha512-TCtu93KGLu6/aiGWzMr12TmSRS6nKdfhAnzTQRbXoSWxkbb9eRd53jQ51jG7g1gYjjtto3hbBrrhzg6djcgiKg==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -9713,7 +10605,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.10.tgz", + "integrity": "sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } }, "node_modules/basic-ftp": { "version": "5.0.5", @@ -9729,13 +10632,15 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -9745,6 +10650,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -9757,6 +10663,7 @@ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -9781,21 +10688,37 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -9805,13 +10728,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -9821,6 +10746,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -9829,9 +10755,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dev": true, "funding": [ { @@ -9847,10 +10773,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001716", - "electron-to-chromium": "^1.5.149", - "node-releases": "^2.0.19", + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { @@ -9900,6 +10828,7 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -9908,7 +10837,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "3.3.0", @@ -9928,19 +10858,23 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cacheable": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.4.tgz", - "integrity": "sha512-Gd7ccIUkZ9TE2odLQVS+PDjIvQCdJKUlLdJRVvZu0aipj07Qfx+XIej7hhDrKGGoIxV5m5fT/kOJNJPQhQneRg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.0.3.tgz", + "integrity": "sha512-nZF80J3d8RMrroMSYm1E9pBllVDXWPuECZgEZxH+vusCY4MAXAJVrY0jutcHSgh3xYX3G2EUNnmtWGZVVjWCXw==", "dev": true, "license": "MIT", "dependencies": { - "hookified": "^1.11.0", - "keyv": "^5.5.0" + "@cacheable/memoize": "^2.0.3", + "@cacheable/memory": "^2.0.3", + "@cacheable/utils": "^2.0.3", + "hookified": "^1.12.1", + "keyv": "^5.5.3" } }, "node_modules/cacheable-lookup": { @@ -9948,6 +10882,7 @@ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -9957,6 +10892,7 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -9971,9 +10907,9 @@ } }, "node_modules/cacheable/node_modules/keyv": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.1.tgz", - "integrity": "sha512-eF3cHZ40bVsjdlRi/RvKAuB0+B61Q1xWvohnrJrnaQslM3h1n79IV+mc9EGag4nrA9ZOlNyr3TUzW5c8uy8vNA==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.3.tgz", + "integrity": "sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==", "dev": true, "license": "MIT", "dependencies": { @@ -9985,6 +10921,7 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -10003,6 +10940,7 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -10016,6 +10954,7 @@ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -10032,6 +10971,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -10041,6 +10981,7 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -10051,6 +10992,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10101,6 +11043,7 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -10109,9 +11052,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001718", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", - "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", + "version": "1.0.30001747", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001747.tgz", + "integrity": "sha512-mzFa2DGIhuc5490Nd/G31xN1pnBnYMadtkyTjefPI7wzypqgCEpeWu9bJr0OnDsyKrW75zA9ZAt7pbQFmwLsQg==", "dev": true, "funding": [ { @@ -10126,13 +11069,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/capital-case": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -10144,6 +11089,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10160,6 +11106,7 @@ "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "capital-case": "^1.0.4", @@ -10197,6 +11144,7 @@ "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz", "integrity": "sha512-YYmFYHV/X7kSJhuN/QYHUu998n/TRuDe8UenM3+m5NrkiH670lb9ILqHIvBencvJc4SDh+XcbXMR4b+TtubJiw==", "dev": true, + "license": "Unlicense", "dependencies": { "chalk": "^3.0.0", "map-values": "^1.0.1", @@ -10217,6 +11165,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10242,9 +11191,9 @@ } }, "node_modules/chrome-launcher": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.0.tgz", - "integrity": "sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz", + "integrity": "sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10265,6 +11214,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } @@ -10294,6 +11244,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -10309,13 +11260,15 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -10328,6 +11281,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -10340,6 +11294,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { "node": ">= 12" } @@ -10356,6 +11311,7 @@ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", "dev": true, + "license": "MIT", "dependencies": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -10367,6 +11323,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -10381,6 +11338,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10398,6 +11356,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -10407,6 +11366,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", "dev": true, + "license": "MIT", "dependencies": { "for-own": "^0.1.3", "is-plain-object": "^2.0.1", @@ -10423,6 +11383,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -10435,6 +11396,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -10447,6 +11409,7 @@ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -10456,6 +11419,7 @@ "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", "dev": true, + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", @@ -10490,6 +11454,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10501,25 +11466,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -10559,6 +11528,7 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -10590,6 +11560,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -10598,7 +11569,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/computed-style": { "version": "0.1.4", @@ -10610,7 +11582,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -10620,6 +11593,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -10628,9 +11602,9 @@ } }, "node_modules/configstore": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", - "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10643,7 +11617,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/connect-history-api-fallback": { @@ -10651,6 +11625,7 @@ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -10660,6 +11635,7 @@ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -10671,6 +11647,7 @@ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -10683,6 +11660,7 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10691,25 +11669,39 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "glob-parent": "^6.0.1", @@ -10734,6 +11726,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10746,6 +11739,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^3.0.1", "dir-glob": "^3.0.1", @@ -10766,6 +11760,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10786,12 +11781,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.25.3" }, "funding": { "type": "opencollective", @@ -10799,11 +11795,12 @@ } }, "node_modules/core-js-pure": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", - "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz", + "integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -10813,13 +11810,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, + "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -10845,13 +11844,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -10904,10 +11905,11 @@ "license": "Apache-2.0" }, "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", + "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -10930,6 +11932,7 @@ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -10965,6 +11968,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10973,10 +11977,11 @@ } }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -10989,12 +11994,13 @@ } }, "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", "dev": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", + "mdn-data": "2.12.2", "source-map-js": "^1.0.1" }, "engines": { @@ -11002,10 +12008,11 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -11018,6 +12025,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -11030,6 +12038,7 @@ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", "dev": true, + "license": "MIT", "dependencies": { "cssnano-preset-default": "^6.1.2", "lilconfig": "^3.1.1" @@ -11050,6 +12059,7 @@ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", @@ -11094,6 +12104,7 @@ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -11106,6 +12117,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -11119,6 +12131,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -11132,19 +12145,22 @@ "version": "2.0.28", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "license": "MIT", "dependencies": { "cssom": "~0.3.6" }, @@ -11156,13 +12172,15 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cwd": { "version": "0.10.0", @@ -11200,6 +12218,7 @@ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -11268,6 +12287,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -11277,19 +12297,22 @@ "version": "4.1.0-0", "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -11307,6 +12330,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11339,16 +12363,18 @@ } }, "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", - "dev": true + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -11364,6 +12390,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11391,6 +12418,7 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -11407,6 +12435,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11416,6 +12445,7 @@ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" }, @@ -11428,6 +12458,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -11440,6 +12471,7 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -11449,6 +12481,7 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -11466,6 +12499,7 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11475,6 +12509,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -11507,6 +12542,7 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -11515,13 +12551,15 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11531,6 +12569,7 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -11541,6 +12580,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -11574,13 +12614,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/devtools-protocol": { "version": "0.0.1507524", @@ -11594,6 +12636,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -11613,6 +12656,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -11625,6 +12669,7 @@ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -11637,6 +12682,7 @@ "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.8.tgz", "integrity": "sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw==", "dev": true, + "license": "MIT", "dependencies": { "yaml": "^2.2.2" }, @@ -11662,6 +12708,7 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/dom-serializer": { @@ -11669,6 +12716,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -11688,7 +12736,8 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domexception": { "version": "4.0.0", @@ -11696,6 +12745,7 @@ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "deprecated": "Use your platform's native DOMException instead", "dev": true, + "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" }, @@ -11708,6 +12758,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -11723,6 +12774,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -11737,6 +12789,7 @@ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -11776,6 +12829,7 @@ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -11789,25 +12843,29 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.157", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz", - "integrity": "sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==", - "dev": true + "version": "1.5.229", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.229.tgz", + "integrity": "sha512-cwhDcZKGcT/rEthLRJ9eBlMDkh1sorgsuk+6dpsehV0g9CABsIqBxU4rLRjG+d/U6pYU1s37A4lSKrVc5lSQYg==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", @@ -11826,13 +12884,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -11842,6 +12902,7 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11851,6 +12912,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "^0.6.2" } @@ -11860,6 +12922,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -11868,19 +12931,21 @@ } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -11908,6 +12973,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -11926,10 +12992,11 @@ } }, "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.15.0.tgz", + "integrity": "sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -11941,7 +13008,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/equivalent-key-map/-/equivalent-key-map-0.2.2.tgz", "integrity": "sha512-xvHeyCDbZzkpN4VHQj/n+j2lOwL0VWszG30X4cOrc9Y7Tuo2qCdZK/0AMod23Z5dCtNUbaju6p0rwOhHUk05ew==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/err-code": { "version": "3.0.1", @@ -11951,10 +13019,11 @@ "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -11964,6 +13033,7 @@ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } @@ -12042,6 +13112,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -12051,6 +13122,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -12087,13 +13159,15 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -12106,6 +13180,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -12152,6 +13227,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -12160,13 +13236,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12179,6 +13257,7 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -12200,6 +13279,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -12630,6 +13710,16 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -12807,6 +13897,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -12820,6 +13911,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -12899,22 +13991,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -12973,19 +14049,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "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==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -13022,6 +14085,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -13048,6 +14112,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -13060,6 +14125,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -13069,6 +14135,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -13078,6 +14145,7 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13086,22 +14154,35 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -13125,6 +14206,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13136,7 +14218,8 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/exit": { "version": "0.1.2", @@ -13181,13 +14264,15 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz", "integrity": "sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -13229,20 +14314,12 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -13251,19 +14328,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extract-zip": { "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==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -13279,6 +14359,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -13287,7 +14368,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-average-color": { "version": "9.5.0", @@ -13303,7 +14385,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -13324,6 +14407,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -13340,6 +14424,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -13351,7 +14436,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -13361,9 +14447,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -13374,13 +14460,15 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -13390,6 +14478,7 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -13399,6 +14488,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -13421,6 +14511,7 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -13443,6 +14534,7 @@ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13452,6 +14544,7 @@ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, + "license": "MIT", "dependencies": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.1", @@ -13469,6 +14562,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -13481,6 +14575,7 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -13499,6 +14594,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -13507,7 +14603,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-cache-dir": { "version": "4.0.0", @@ -13526,110 +14623,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/find-file-up": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", @@ -13648,7 +14641,8 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-pkg": { "version": "0.1.2", @@ -13682,13 +14676,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -13702,6 +14698,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -13746,9 +14743,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -13756,6 +14753,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -13770,6 +14768,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, @@ -13785,6 +14784,7 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13794,6 +14794,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -13806,6 +14807,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -13839,6 +14841,7 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13869,6 +14872,7 @@ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", "dev": true, + "license": "MIT", "dependencies": { "motion-dom": "^11.18.1", "motion-utils": "^11.18.1", @@ -13896,6 +14900,7 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13911,16 +14916,18 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "dev": true, + "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -13928,6 +14935,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -13941,6 +14949,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13971,15 +14980,27 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -13996,6 +15017,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -14005,6 +15027,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -14029,6 +15052,7 @@ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -14061,6 +15085,7 @@ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -14074,6 +15099,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14086,6 +15112,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -14134,6 +15161,7 @@ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz", "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==", "dev": true, + "license": "MIT", "dependencies": { "encoding": "^0.1.12", "safe-buffer": "^5.1.1" @@ -14145,6 +15173,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14165,6 +15194,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -14176,13 +15206,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14193,6 +15225,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14244,12 +15277,19 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -14302,6 +15342,7 @@ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", "dev": true, + "license": "MIT", "dependencies": { "delegate": "^3.1.2" } @@ -14311,6 +15352,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14323,6 +15365,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -14347,7 +15390,17 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/gradient-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gradient-parser/-/gradient-parser-1.1.1.tgz", + "integrity": "sha512-Hu0YfNU+38EsTmnUfLXUKFMXq9yz7htGYpF4x+dlbBhUCvIvzLt0yVLT/gJRmvLKFJdqNFrz4eKkIUjIXSr7Tw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/graphemer": { "version": "1.4.0", @@ -14361,6 +15414,7 @@ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "^0.1.2" }, @@ -14375,7 +15429,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hard-rejection": { "version": "2.1.0", @@ -14392,6 +15447,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14404,6 +15460,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14413,6 +15470,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -14441,6 +15499,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14453,6 +15512,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -14468,6 +15528,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -14480,6 +15541,7 @@ "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", "dev": true, + "license": "MIT", "dependencies": { "capital-case": "^1.0.4", "tslib": "^2.0.3" @@ -14489,7 +15551,8 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.3.tgz", "integrity": "sha512-m1O9HW3/GNHxzSIXWw1wCNXXsgLlxrP0OI6+ycGUhiUHkikqW3OrwVHz+lxeNBe5yqLESdIcj8PowHQ2zLvUvQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/history": { "version": "5.3.0", @@ -14506,6 +15569,7 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -14514,7 +15578,8 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/homedir-polyfill": { "version": "1.0.3", @@ -14530,9 +15595,9 @@ } }, "node_modules/hookified": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.0.tgz", - "integrity": "sha512-hMr1Y9TCLshScrBbV2QxJ9BROddxZ12MX9KsCtuGGy/3SmmN5H1PllKerrVlSotur9dlE8hmUKAOSa3WDzsZmQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.1.tgz", + "integrity": "sha512-xnKGl+iMIlhrZmGHB729MqlmPoWBznctSQTYCpFKqNsCgimJQmithcW0xSQMMFzYnV2iKUh25alswn6epgxS0Q==", "dev": true, "license": "MIT" }, @@ -14574,6 +15639,7 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -14585,13 +15651,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/hpq/-/hpq-1.4.0.tgz", "integrity": "sha512-ycJQMRaRPBcfnoT1gS5I1XCvbbw9KO94Y0vkwksuOjcJMqNZtb03MF2tCItLI2mQbkZWSSeFinoRDPmjzv4tKg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" }, @@ -14613,13 +15681,15 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ] + ], + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/html-tags": { "version": "3.3.1", @@ -14638,19 +15708,22 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -14676,13 +15749,15 @@ "version": "0.5.10", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -14697,6 +15772,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -14711,6 +15787,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -14735,6 +15812,7 @@ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -14748,6 +15826,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -14761,20 +15840,26 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/icss-utils": { @@ -14782,6 +15867,7 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -14807,13 +15893,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -14823,6 +15911,7 @@ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^3.0.4" }, @@ -14831,10 +15920,11 @@ } }, "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14845,6 +15935,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14871,6 +15962,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -14887,14 +15979,15 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/import-in-the-middle": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", - "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.4.tgz", + "integrity": "sha512-eWjxh735SJLFJJDs5X82JQ2405OdJeAHDBnaoFCfdr5GVc7AWc9xU7KbrF+3Xd5F2ccP1aQFKtY+65X6EfKZ7A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14909,6 +16002,7 @@ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -14923,6 +16017,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/import-locals": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-locals/-/import-locals-2.0.0.tgz", @@ -14956,6 +16063,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -14965,7 +16073,8 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", @@ -14979,6 +16088,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", @@ -14993,6 +16103,7 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -15025,6 +16136,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -15044,6 +16156,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -15060,7 +16173,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", @@ -15087,6 +16201,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, @@ -15102,6 +16217,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -15114,6 +16230,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -15129,7 +16246,8 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-builtin-module": { "version": "3.2.1", @@ -15152,6 +16270,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15164,6 +16283,7 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -15197,6 +16317,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -15213,6 +16334,7 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -15228,6 +16350,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15237,6 +16360,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15262,6 +16386,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15277,14 +16402,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -15300,6 +16426,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -15312,6 +16439,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15321,6 +16449,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15346,6 +16475,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -15355,6 +16485,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -15381,6 +16512,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15393,6 +16525,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15401,7 +16534,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-promise": { "version": "4.0.0", @@ -15415,6 +16549,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -15433,6 +16568,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15445,6 +16581,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -15460,6 +16597,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -15472,6 +16610,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -15488,6 +16627,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", @@ -15534,6 +16674,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15562,6 +16703,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" @@ -15588,6 +16730,7 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -15599,7 +16742,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", @@ -15613,6 +16757,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15732,6 +16877,7 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -15816,6 +16962,34 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-cli": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", @@ -15896,6 +17070,34 @@ } } }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-dev-server": { "version": "10.1.4", "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-10.1.4.tgz", @@ -15931,6 +17133,34 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-docblock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -15961,11 +17191,40 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-environment-jsdom": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -16056,17 +17315,73 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils": { + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -16077,6 +17392,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -16092,11 +17408,40 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -16268,6 +17613,34 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -16286,6 +17659,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -16316,6 +17690,34 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -16369,17 +17771,22 @@ } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", + "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" + }, + "engines": { + "node": ">= 20" } }, "node_modules/jpeg-js": { @@ -16403,13 +17810,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -16433,6 +17842,7 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "acorn": "^8.8.1", @@ -16478,6 +17888,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -16489,19 +17900,22 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -16522,6 +17936,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -16533,7 +17948,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsx-ast-utils": { "version": "3.3.5", @@ -16556,6 +17972,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -16565,6 +17982,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -16587,6 +18005,7 @@ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -16619,13 +18038,14 @@ } }, "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", + "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/lazy-cache": { @@ -16633,6 +18053,7 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16753,13 +18174,13 @@ "license": "Apache-2.0" }, "node_modules/lighthouse/node_modules/@puppeteer/browsers": { - "version": "2.10.9", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.9.tgz", - "integrity": "sha512-kUGHwABarVhvMP+zhW5zvDA7LmGcd4TwrTEBwcTQic5EebUqaK5NjC0UXLJepIFVGsr2N/Z8NJQz2JYGo1ZwxA==", + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", + "integrity": "sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "debug": "^4.4.1", + "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", @@ -16796,18 +18217,18 @@ } }, "node_modules/lighthouse/node_modules/puppeteer-core": { - "version": "24.20.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.20.0.tgz", - "integrity": "sha512-n0y/f8EYyZt4yEJkjP3Vrqf9A4qa3uYpKYdsiedIY4bxIfTw1aAJSpSVPmWBPlr1LO4cNq2hGNIBWKPhvBF68w==", + "version": "24.23.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.23.0.tgz", + "integrity": "sha512-yl25C59gb14sOdIiSnJ08XiPP+O2RjuyZmEG+RjYmCXO7au0jcLf7fRiyii96dXGUBW7Zwei/mVKfxMx/POeFw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.10.9", - "chromium-bidi": "8.0.0", - "debug": "^4.4.1", - "devtools-protocol": "0.0.1495869", + "@puppeteer/browsers": "2.10.10", + "chromium-bidi": "9.1.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1508733", "typed-query-selector": "^2.12.0", - "webdriver-bidi-protocol": "0.2.8", + "webdriver-bidi-protocol": "0.3.6", "ws": "^8.18.3" }, "engines": { @@ -16815,9 +18236,9 @@ } }, "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/chromium-bidi": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-8.0.0.tgz", - "integrity": "sha512-d1VmE0FD7lxZQHzcDUCKZSNRtRwISXDsdg4HjdTR5+Ll5nQ/vzU12JeNmupD6VWffrPSlrnGhEWlLESKH3VO+g==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-9.1.0.tgz", + "integrity": "sha512-rlUzQ4WzIAWdIbY/viPShhZU2n21CxDUgazXVbw4Hu1MwaeUSEksSeM6DqPgpRjCLXRk702AVRxJxoOz0dw4OA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -16829,9 +18250,9 @@ } }, "node_modules/lighthouse/node_modules/puppeteer-core/node_modules/devtools-protocol": { - "version": "0.0.1495869", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1495869.tgz", - "integrity": "sha512-i+bkd9UYFis40RcnkW7XrOprCujXRAHg62IVh/Ah3G8MmNXpCGt1m0dTFhSdx/AVs8XEMbdOGRwdkR1Bcta8AA==", + "version": "0.0.1508733", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1508733.tgz", + "integrity": "sha512-QJ1R5gtck6nDcdM+nlsaJXcelPEI7ZxSMw1ujHpO1c4+9l+Nue5qlebi9xO1Z2MGr92bFOQTW7/rrheh5hHxDg==", "dev": true, "license": "BSD-3-Clause" }, @@ -16907,6 +18328,7 @@ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -16919,6 +18341,7 @@ "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", "integrity": "sha512-YExecgqPwnp5gplD2+Y8e8A5+jKpr25+DzMbFdI1/1UAr0FJrTFv4VkHLf8/6B590i1wUPJWMKKldkd/bdQ//w==", "dev": true, + "license": "MIT", "dependencies": { "computed-style": "~0.1.3" }, @@ -16930,13 +18353,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^1.0.1" } @@ -16946,6 +18371,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" } @@ -16955,6 +18381,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16969,6 +18396,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -16994,13 +18422,15 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -17020,7 +18450,8 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", @@ -17065,6 +18496,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -17077,6 +18509,7 @@ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -17086,6 +18519,7 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -17095,6 +18529,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -17104,6 +18539,7 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, + "license": "MIT", "peer": true, "bin": { "lz-string": "bin/bin.js" @@ -17165,13 +18601,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-values/-/map-values-1.0.1.tgz", "integrity": "sha512-BbShUnr5OartXJe1GeccAWtfro11hhgNJg6G9/UtWKjVGvV5U4C09cg5nk8JUevhXODaXY+hQ3xxMUKSs62ONQ==", - "dev": true + "dev": true, + "license": "Public Domain" }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "~2.1.0", @@ -17187,13 +18625,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/markdown-it/node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -17203,6 +18643,7 @@ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.25.1.tgz", "integrity": "sha512-AG7UkLzNa1fxiOv5B+owPsPhtM4D6DoODhsJgiaNg1xowXovrYgOnLqAgOOFQpWOlHFVQUzjMY5ypNNTeov92g==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "12.3.2" }, @@ -17215,6 +18656,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.31.1.tgz", "integrity": "sha512-keIOMwQn+Ch7MoBwA+TdkyVMuxAeZFEGmIIlvwgV0Z1TGS5MxPnRr29XCLhkNzCHU+uNKGjU+VEjLX+Z9kli6g==", "dev": true, + "license": "MIT", "dependencies": { "commander": "~9.0.0", "get-stdin": "~9.0.0", @@ -17238,13 +18680,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/markdownlint-cli/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17255,6 +18699,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -17264,6 +18709,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -17273,6 +18719,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -17285,6 +18732,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17296,7 +18744,8 @@ "version": "0.16.0", "resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.16.0.tgz", "integrity": "sha512-oEacRUVeTJ5D5hW1UYd2qExYI0oELdYK72k1TKGvIeYJIbqQWAz476NAc7LNixSySUhcNl++d02DvX0ccDk9/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/marky": { "version": "1.3.0", @@ -17310,6 +18759,7 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -17326,22 +18776,25 @@ } }, "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -17351,6 +18804,7 @@ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, + "license": "Unlicense", "dependencies": { "fs-monkey": "^1.0.4" }, @@ -17359,10 +18813,11 @@ } }, "node_modules/memize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.0.tgz", - "integrity": "sha512-yywVJy8ctVlN5lNPxsep5urnZ6TTclwPEyigM9M3Bi8vseJBOfqNrGWN/r8NzuIt3PovM323W04blJfGQfQSVg==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/memize/-/memize-2.1.1.tgz", + "integrity": "sha512-8Nl+i9S5D6KXnruM03Jgjb+LwSupvR13WBr4hJegaaEyobvowCVupi79y2WSiWvO1mzBWxPwEYE5feCe8vyA5w==", + "dev": true, + "license": "MIT" }, "node_modules/meow": { "version": "9.0.0", @@ -17419,6 +18874,7 @@ "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "clone-deep": "^0.2.4", @@ -17433,6 +18889,7 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -17441,13 +18898,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -17464,6 +18923,7 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -17473,6 +18933,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -17499,6 +18960,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -17508,6 +18970,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -17520,6 +18983,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -17529,6 +18993,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -17544,10 +19009,11 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -17567,7 +19033,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimatch": { "version": "9.0.3", @@ -17590,6 +19057,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17634,6 +19102,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -17650,6 +19119,7 @@ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^0.1.3", "is-extendable": "^0.1.1" @@ -17663,6 +19133,7 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17672,6 +19143,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -17714,6 +19186,7 @@ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", "dev": true, + "license": "MIT", "dependencies": { "motion-utils": "^11.18.1" } @@ -17722,19 +19195,22 @@ "version": "11.18.1", "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mousetrap": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==", - "dev": true + "dev": true, + "license": "Apache-2.0 WITH LLVM-exception" }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -17743,13 +19219,15 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -17763,6 +19241,7 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, + "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -17778,6 +19257,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -17797,6 +19277,7 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -17805,7 +19286,8 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netmask": { "version": "2.0.2", @@ -17822,6 +19304,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -17840,6 +19323,7 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } @@ -17852,10 +19336,11 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "3.0.3", @@ -17891,6 +19376,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17910,6 +19396,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17921,13 +19408,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^1.0.1" } @@ -17936,7 +19425,8 @@ "version": "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==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/npm-package-json-lint": { "version": "6.4.0", @@ -18009,6 +19499,7 @@ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.6", "ignore-walk": "^4.0.1", @@ -18027,6 +19518,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -18039,6 +19531,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -18047,16 +19540,18 @@ } }, "node_modules/nwsapi": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", - "dev": true + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18065,13 +19560,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz", "integrity": "sha512-NahvP2vZcy1ZiiYah30CEPw0FpDcSkSePJBMpzl5EQgCmISijiGuJm3SPYp7U+Lf2TljyaIw3E5EgkEx/TNEVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -18084,6 +19581,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -18093,6 +19591,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -18181,13 +19680,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -18210,6 +19711,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -18219,6 +19721,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -18234,6 +19737,7 @@ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -18251,6 +19755,7 @@ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, + "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } @@ -18278,6 +19783,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", @@ -18300,6 +19806,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18313,6 +19820,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -18321,13 +19829,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -18337,6 +19847,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -18346,6 +19857,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.4.2" }, @@ -18358,6 +19870,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -18370,6 +19883,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -18384,6 +19898,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -18395,7 +19910,8 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/os-homedir": { "version": "1.0.2", @@ -18430,6 +19946,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -18455,6 +19972,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -18467,6 +19985,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -18482,6 +20001,7 @@ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -18495,6 +20015,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -18575,13 +20096,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -18592,6 +20115,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -18610,6 +20134,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -18638,6 +20163,7 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, + "license": "MIT", "dependencies": { "entities": "^6.0.0" }, @@ -18646,10 +20172,11 @@ } }, "node_modules/parse5/node_modules/entities": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -18658,16 +20185,28 @@ } }, "node_modules/parsel-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/parsel-js/-/parsel-js-1.2.1.tgz", - "integrity": "sha512-omFBig09mUh/NjBGba4DxVFAsqCY4C/6UYIaJuDOxJw2GlpgUJdPlNF301971gCP3Gt727+F+NZIXN483VAKIg==", - "dev": true + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parsel-js/-/parsel-js-1.2.2.tgz", + "integrity": "sha512-AVJMlwQ4bL2Y0VvYJGk+Fp7eX4SCH2uFoNApmn4yKWACUewZ+alwW3tyoe1r5Z3aLYQTuAuPZIyGghMfO/Tlxw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/LeaVerou" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/leaverou" + } + ], + "license": "MIT" }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -18677,6 +20216,7 @@ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -18687,6 +20227,7 @@ "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -18697,6 +20238,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -18706,6 +20248,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18715,6 +20258,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -18723,13 +20267,15 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -18745,19 +20291,22 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/path-to-regexp": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -18766,7 +20315,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pg-int8": { "version": "1.0.1", @@ -18806,13 +20356,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -18831,26 +20383,118 @@ } }, "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "find-up": "^6.3.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/playwright": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", - "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", + "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", "dev": true, "license": "Apache-2.0", "peer": true, "dependencies": { - "playwright-core": "1.55.0" + "playwright-core": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -18863,9 +20507,9 @@ } }, "node_modules/playwright-core": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", - "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", + "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -18913,6 +20557,7 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -18951,6 +20596,7 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" @@ -18967,6 +20613,7 @@ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -18985,6 +20632,7 @@ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -19001,6 +20649,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -19013,6 +20662,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -19025,6 +20675,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -19037,6 +20688,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -19049,6 +20701,7 @@ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -19071,6 +20724,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -19087,6 +20741,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -19099,6 +20754,7 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } @@ -19115,6 +20771,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^6.1.1" @@ -19131,6 +20788,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -19149,6 +20807,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19164,6 +20823,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", "dev": true, + "license": "MIT", "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^4.0.2", @@ -19181,6 +20841,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "cssnano-utils": "^4.0.2", @@ -19198,6 +20859,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -19213,6 +20875,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -19225,6 +20888,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", @@ -19242,6 +20906,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19255,6 +20920,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -19270,6 +20936,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19283,6 +20950,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -19298,6 +20966,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -19310,6 +20979,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19325,6 +20995,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19340,6 +21011,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19355,6 +21027,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19370,6 +21043,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19385,6 +21059,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" @@ -19401,6 +21076,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19416,6 +21092,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19431,6 +21108,7 @@ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", "dev": true, + "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" @@ -19447,6 +21125,7 @@ "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz", "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==", "dev": true, + "license": "MIT", "peerDependencies": { "postcss": ">4 <9" } @@ -19456,6 +21135,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" @@ -19472,6 +21152,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19548,6 +21229,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19561,6 +21243,7 @@ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.2.0" @@ -19577,6 +21260,7 @@ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, @@ -19592,6 +21276,7 @@ "resolved": "https://registry.npmjs.org/postcss-urlrebase/-/postcss-urlrebase-1.4.0.tgz", "integrity": "sha512-rRaxMmWvXrn8Rk1PqsxmaJwldRHsr0WbbASKKCZYxXwotHkM/5X/6IrwaEe8pdzpbNGCEY86yhYMN0MhgOkADA==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -19603,7 +21288,8 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/postgres-array": { "version": "2.0.0", @@ -19649,10 +21335,11 @@ } }, "node_modules/preact": { - "version": "10.26.7", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.7.tgz", - "integrity": "sha512-43xS+QYc1X1IPbw03faSgY6I6OYWcLrJRv3hU0+qMOfh/XCHcP0MX2CVjNARYR2cC/guu975sta4OcjlczxD7g==", + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -19674,6 +21361,7 @@ "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-3.0.3.tgz", "integrity": "sha512-X4UlrxDTH8oom9qXlcjnydsjAOD2BmB6yFmvS4Z2zdTzqqpRWb+fbqrH412+l+OUXmbzJlSXjlMFYPgYG12IAA==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -19698,17 +21386,19 @@ } }, "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@jest/schemas": "^29.6.3", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -19716,6 +21406,8 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -19723,11 +21415,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", @@ -19758,6 +21459,7 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -19768,13 +21470,15 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -19788,6 +21492,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -19872,6 +21577,7 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -19880,10 +21586,11 @@ } }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -19894,6 +21601,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -19945,6 +21653,7 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -19959,7 +21668,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -19979,13 +21689,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -19998,6 +21710,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -20007,6 +21720,7 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -20016,6 +21730,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -20026,11 +21741,25 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/re-resizable": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.11.2.tgz", "integrity": "sha512-2xI2P3OHs5qw7K0Ud1aLILK6MQxW50TcO+DetD9eIV58j84TqYeHoZcL9H4GXFXXIh7afhH8mv5iUCXII7OW7A==", "dev": true, + "license": "MIT", "peerDependencies": { "react": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -20041,6 +21770,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -20053,6 +21783,7 @@ "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz", "integrity": "sha512-BHpjCDkuOlllZn3nLazY2F8oYO1tS2jHnWhcjTWQdcKiiMU6gHLNt/fzmqMSyerR0eTdKtfSIqtSeTtghNwS+g==", "dev": true, + "license": "MIT", "dependencies": { "autosize": "^4.0.2", "line-height": "^0.3.1", @@ -20068,20 +21799,22 @@ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", "dev": true, + "license": "MIT", "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/react-day-picker": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.8.0.tgz", - "integrity": "sha512-E0yhhg7R+pdgbl/2toTb0xBhsEAtmAx1l7qjIWYfcxOy8w4rTSVfbtBoSzVVhPwKP/5E9iL38LivzoE3AQDhCQ==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.11.0.tgz", + "integrity": "sha512-L4FYOaPrr3+AEROeP6IG2mCORZZfxJDkJI2df8mv1jyPrNYeccgmFPZDaHyAuPCBCddQFozkxbikj2NhMEYfDQ==", "dev": true, + "license": "MIT", "dependencies": { - "@date-fns/tz": "1.2.0", - "date-fns": "4.1.0", - "date-fns-jalali": "4.1.0-0" + "@date-fns/tz": "^1.4.1", + "date-fns": "^4.1.0", + "date-fns-jalali": "^4.1.0-0" }, "engines": { "node": ">=18" @@ -20099,6 +21832,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -20109,6 +21843,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -20118,10 +21853,11 @@ } }, "node_modules/react-easy-crop": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.4.2.tgz", - "integrity": "sha512-V+GQUTkNWD8gK0mbZQfwTvcDxyCB4GS0cM36is8dAcvnsHY7DMEDP2D5IqHju55TOiCHwElJPVOYDgiu8BEiHQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.5.3.tgz", + "integrity": "sha512-iKwFTnAsq+IVuyF6N0Q3zjRx9DG1NMySkwWxVfM/xAOeHYH1vhvM+V2kFiq5HOIQGWouITjfltCx54mbDpMpmA==", "dev": true, + "license": "MIT", "dependencies": { "normalize-wheel": "^1.0.1", "tslib": "^2.0.1" @@ -20135,22 +21871,25 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-remove-scroll": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.0.tgz", - "integrity": "sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", "dev": true, + "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", @@ -20176,6 +21915,7 @@ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dev": true, + "license": "MIT", "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" @@ -20198,6 +21938,7 @@ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dev": true, + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" @@ -20304,6 +22045,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -20318,7 +22060,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/readdirp": { "version": "4.1.2", @@ -20339,6 +22082,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -20394,13 +22138,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -20412,13 +22158,15 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -20435,17 +22183,18 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -20455,43 +22204,35 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/rememo": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/rememo/-/rememo-4.0.2.tgz", "integrity": "sha512-NVfSP9NstE3QPNs/TnegQY0vnJnstKQSpcrsI2kBTB3dB2PkdfKdTa+abbjMIDqpc63fE5LfjLgfMst0ULMFxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/requestidlecallback": { "version": "0.3.0", @@ -20505,6 +22246,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -20514,6 +22256,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -20537,7 +22280,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/requireindex": { "version": "1.2.0", @@ -20553,13 +22297,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -20579,13 +22325,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-bin": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.3.tgz", "integrity": "sha512-9u8TMpc+SEHXxQXblXHz5yRvRZERkCZimFN9oz85QI3uhkh7nqfjm6OGTLg+8vucpXGcY4jLK6WkylPmt7GSvw==", "dev": true, + "license": "MIT", "dependencies": { "find-parent-dir": "~0.3.0" } @@ -20595,6 +22343,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -20621,6 +22370,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -20640,6 +22390,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -20652,6 +22403,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -20664,13 +22416,15 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -20680,6 +22434,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -20690,6 +22445,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^10.3.7" }, @@ -20705,6 +22461,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -20725,6 +22482,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -20776,6 +22534,7 @@ "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.12.tgz", "integrity": "sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~3.0.0", @@ -20791,6 +22550,7 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", "dev": true, + "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -20814,6 +22574,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -20880,7 +22641,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-push-apply": { "version": "1.0.0", @@ -20911,6 +22673,7 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -20927,12 +22690,13 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sass": { - "version": "1.92.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.92.1.tgz", - "integrity": "sha512-ffmsdbwqb3XeyR8jJR6KelIXARM9bFQe8A6Q3W4Klmwy5Ckd5gz7jgUNHo4UOqutU5Sk1DtKLbpDP0nLCg1xqQ==", + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", "dependencies": { @@ -20996,6 +22760,7 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -21008,15 +22773,17 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -21036,6 +22803,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -21052,6 +22820,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -21063,25 +22832,29 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -21095,6 +22868,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -21104,6 +22878,7 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -21128,6 +22903,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -21136,13 +22912,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -21152,6 +22930,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -21164,6 +22943,7 @@ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -21175,6 +22955,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -21184,6 +22965,7 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -21202,6 +22984,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -21211,6 +22994,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -21220,6 +23004,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -21234,25 +23019,29 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -21262,6 +23051,7 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -21276,13 +23066,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -21300,6 +23092,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -21329,13 +23122,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/shallow-clone": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.1", "kind-of": "^2.0.1", @@ -21351,6 +23146,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.0.2" }, @@ -21363,6 +23159,7 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -21391,10 +23188,11 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -21414,6 +23212,7 @@ "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz", "integrity": "sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "yargs": "^14.2" }, @@ -21426,6 +23225,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -21435,6 +23235,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -21447,6 +23248,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -21456,6 +23258,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -21467,6 +23270,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -21475,19 +23279,22 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/showdown/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/showdown/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -21500,6 +23307,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -21509,6 +23317,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -21522,6 +23331,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -21537,6 +23347,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -21549,6 +23360,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -21558,6 +23370,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -21572,6 +23385,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -21584,6 +23398,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -21597,13 +23412,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/showdown/node_modules/yargs": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^5.0.0", "decamelize": "^1.2.0", @@ -21623,6 +23440,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -21633,6 +23451,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -21652,6 +23471,7 @@ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -21668,6 +23488,7 @@ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -21686,6 +23507,7 @@ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -21705,6 +23527,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -21713,14 +23536,15 @@ } }, "node_modules/simple-git": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz", + "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==", "dev": true, + "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.5" + "debug": "^4.4.0" }, "funding": { "type": "github", @@ -21731,7 +23555,8 @@ "version": "0.5.11", "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz", "integrity": "sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/simple-peer": { "version": "9.11.1", @@ -21783,6 +23608,7 @@ "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -21804,6 +23630,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -21842,6 +23669,7 @@ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -21852,6 +23680,7 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -21863,6 +23692,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -21912,6 +23742,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -21921,6 +23752,7 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -21930,6 +23762,7 @@ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.5", "iconv-lite": "^0.6.3", @@ -21951,6 +23784,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -22045,6 +23879,7 @@ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -22061,6 +23896,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -22075,6 +23911,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -22099,11 +23936,19 @@ "node": ">=8.0" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -22116,6 +23961,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -22124,13 +23970,15 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -22140,6 +23988,7 @@ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" @@ -22149,17 +23998,15 @@ } }, "node_modules/streamx": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", - "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { @@ -22167,6 +24014,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -22175,7 +24023,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string-length": { "version": "4.0.2", @@ -22196,6 +24045,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -22211,6 +24061,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -22224,13 +24075,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string.prototype.includes": { "version": "2.0.1", @@ -22350,6 +24203,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -22363,6 +24217,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -22385,6 +24240,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -22407,6 +24263,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -22419,6 +24276,7 @@ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -22431,6 +24289,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -22453,6 +24312,7 @@ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.16" @@ -22592,32 +24452,11 @@ }, "engines": { "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.0.2" - } - }, - "node_modules/stylelint-scss/node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + }, + "peerDependencies": { + "stylelint": "^16.0.2" } }, - "node_modules/stylelint-scss/node_modules/css-tree/node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/stylelint-scss/node_modules/known-css-properties": { "version": "0.36.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", @@ -22734,20 +24573,6 @@ } } }, - "node_modules/stylelint/node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "10.1.4", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz", @@ -22759,15 +24584,15 @@ } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.13.tgz", - "integrity": "sha512-gmtS2PaUjSPa4zjObEIn4WWliKyZzYljgxODBfxugpK6q6HU9ClXzgCJ+nlcPKY9Bt090ypTOLIFWkV0jbKFjw==", + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.17.tgz", + "integrity": "sha512-Jzse4YoiUJBVYTwz5Bwl4h/2VQM7e2KK3MVAMlXzX9uamIHAH/TXUlRKU1AQGQOryQhN0EsmufiiF40G057YXA==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^1.10.4", + "cacheable": "^2.0.3", "flatted": "^3.3.3", - "hookified": "^1.11.0" + "hookified": "^1.12.0" } }, "node_modules/stylelint/node_modules/global-modules": { @@ -22831,13 +24656,6 @@ "node": ">=0.10.0" } }, - "node_modules/stylelint/node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/stylelint/node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -22865,23 +24683,6 @@ "node": ">=4" } }, - "node_modules/stylelint/node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" - } - }, "node_modules/stylelint/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -22913,13 +24714,15 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -22928,16 +24731,20 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -22945,6 +24752,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -22956,7 +24764,8 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/svg-tags": { "version": "1.0.0", @@ -22969,6 +24778,7 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -22994,15 +24804,38 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, + "node_modules/svgo/node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/synckit": { "version": "0.11.11", @@ -23066,17 +24899,23 @@ "resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz", "integrity": "sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==", "dev": true, + "license": "MIT", "dependencies": { "@tannin/plural-forms": "^1.1.0" } }, "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar-fs": { @@ -23107,9 +24946,9 @@ } }, "node_modules/tar-stream/node_modules/b4a": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.1.tgz", - "integrity": "sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -23126,6 +24965,7 @@ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -23137,14 +24977,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/terminal-link/node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/terser": { - "version": "5.39.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.2.tgz", - "integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -23160,6 +25015,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -23194,6 +25050,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -23208,6 +25065,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -23222,13 +25080,15 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -23238,6 +25098,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -23293,9 +25154,9 @@ } }, "node_modules/text-decoder/node_modules/b4a": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.1.tgz", - "integrity": "sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -23332,29 +25193,31 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tldts-core": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.14.tgz", - "integrity": "sha512-viZGNK6+NdluOJWwTO9olaugx0bkKhscIdriQQ+lNNhwitIKvb+SvhbYgnCz6j9p7dX3cJntt4agQAKMXLjJ5g==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.16.tgz", + "integrity": "sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA==", "dev": true, "license": "MIT" }, "node_modules/tldts-icann": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.14.tgz", - "integrity": "sha512-UZPOb6KYSFBH8QD6QkK1FH2WGM7opD0s0KGafoHA4UnOQirBHtNs45kOfgy0E5a/a9fx8ukPS4E+nl7Dp3oYAw==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.16.tgz", + "integrity": "sha512-WS/pPasPs2cx6orcxCcIz01SlG3dwYlgjLAnQt7vLAusTuTLqdI8zmkqbM8TWYEf3Z0o1S4BzM3oSRFPk/6WnA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.14" + "tldts-core": "^7.0.16" } }, "node_modules/tmpl": { @@ -23369,6 +25232,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -23381,6 +25245,7 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -23390,6 +25255,7 @@ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -23399,6 +25265,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -23414,6 +25281,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -23446,6 +25314,7 @@ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -23458,6 +25327,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -23515,7 +25385,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -23558,15 +25429,17 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "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==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -23579,6 +25452,7 @@ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -23676,13 +25550,15 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "peer": true, "bin": { "tsc": "bin/tsc", @@ -23696,7 +25572,8 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unbox-primitive": { "version": "1.1.0", @@ -23754,16 +25631,18 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.13.0.tgz", + "integrity": "sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23773,6 +25652,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -23782,19 +25662,21 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23804,6 +25686,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -23813,6 +25696,7 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -23836,6 +25720,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -23852,6 +25737,7 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -23861,6 +25747,7 @@ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -23870,6 +25757,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -23879,6 +25767,7 @@ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", @@ -23906,6 +25795,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -23924,6 +25814,7 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -23934,6 +25825,7 @@ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -23955,6 +25847,7 @@ "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", "dev": true, + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -23964,6 +25857,7 @@ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dev": true, + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -23982,10 +25876,11 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "dev": true, + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -23994,13 +25889,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -24014,6 +25911,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -24077,6 +25975,7 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -24086,6 +25985,7 @@ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, + "license": "MIT", "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -24094,14 +25994,14 @@ } }, "node_modules/wait-on": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", - "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", + "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", "dev": true, "license": "MIT", "dependencies": { - "axios": "^1.11.0", - "joi": "^17.13.3", + "axios": "^1.12.1", + "joi": "^18.0.1", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" @@ -24128,6 +26028,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -24141,6 +26042,7 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } @@ -24150,6 +26052,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -24162,9 +26065,9 @@ "license": "Apache-2.0" }, "node_modules/webdriver-bidi-protocol": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.2.8.tgz", - "integrity": "sha512-KPvtVAIX8VHjLZH1KHT5GXoOaPeb0Ju+JlAcdshw6Z/gsmRtLoxt0Hw99PgJwZta7zUQaAUIHHWDRkzrPHsQTQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.6.tgz", + "integrity": "sha512-mlGndEOA9yK9YAbvtxaPTqdi/kaCWYYfwrZvGzcmkr/3lWM+tQj53BxtpVd6qbC6+E5OnHXgCcAhre6AkXzxjA==", "dev": true, "license": "Apache-2.0" }, @@ -24173,26 +26076,29 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { - "version": "5.99.9", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", - "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "version": "5.102.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.0.tgz", + "integrity": "sha512-hUtqAR3ZLVEYDEABdBioQCIqSoguHbFn1K7WlPPWSuXmx0031BD73PSE35jKyftdSh4YLDoQNgK4pqBt5Q82MA==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.24.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -24203,10 +26109,10 @@ "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.2", - "tapable": "^2.1.1", + "tapable": "^2.2.3", "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -24229,6 +26135,7 @@ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", @@ -24255,6 +26162,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -24264,6 +26172,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -24285,6 +26194,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -24330,6 +26240,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -24339,6 +26250,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -24362,6 +26274,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "dev": true, + "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -24421,6 +26334,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -24445,6 +26359,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -24457,6 +26372,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -24470,6 +26386,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -24485,6 +26402,7 @@ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -24499,6 +26417,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -24513,6 +26432,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -24525,6 +26445,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -24534,6 +26455,7 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -24542,10 +26464,11 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.0.tgz", - "integrity": "sha512-77R0RDmJfj9dyv5p3bM5pOHa+X8/ZkO9c7kpDstigkC4nIDobadsfSGCwB4bKhMVxqAok8tajaoR8rirM7+VFQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -24555,6 +26478,7 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -24569,6 +26493,7 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -24578,6 +26503,7 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -24590,6 +26516,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -24602,6 +26529,7 @@ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -24611,6 +26539,7 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -24647,6 +26576,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", @@ -24701,6 +26631,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -24718,13 +26649,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -24745,7 +26678,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", @@ -24762,6 +26696,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -24777,6 +26712,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -24793,7 +26729,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -24817,10 +26754,11 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -24855,6 +26793,7 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12" } @@ -24863,7 +26802,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xtend": { "version": "4.0.2", @@ -24950,6 +26890,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -24958,13 +26899,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -24977,6 +26920,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -24995,6 +26939,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -25004,6 +26949,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -25041,10 +26987,11 @@ } }, "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, From 85b956d8f92ee4cf52d12606bf7768f87a487ba4 Mon Sep 17 00:00:00 2001 From: Konstantin Obenland Date: Mon, 6 Oct 2025 08:03:48 -0500 Subject: [PATCH 49/52] Reorganize test directory structure (#2289) --- .distignore | 2 +- .github/workflows/phpunit.yml | 2 +- docs/development-environment.md | 2 +- phpunit.xml.dist | 6 +-- {tests => phpunit}/bootstrap.php | 6 +-- {tests => phpunit/data}/assets/test.jpg | Bin .../data/class-autoload-test-file.php | 0 .../example-com-well-known-webfinger.json | 18 ++++++++ .../data/fixtures/http-signature-keys.json | 41 ++++++++++++++++++ .../data/fixtures/lemmy-ml-u-pfefferle.json | 17 ++++++++ .../lemmy-ml-well-known-webfinger.json | 17 ++++++++ .../notiz-blog-author-matthias-pfefferle.json | 22 ++++++++++ .../notiz-blog-well-known-webfinger.json | 22 ++++++++++ .../data/mocks}/class-jetpack.php | 0 .../data/mocks}/class-manager.php | 0 .../class-activitypub-outbox-testcase.php | 0 .../class-activitypub-testcase-cache-http.php | 4 +- .../class-activitypub-testcase-timer.php | 0 .../class-test-rest-controller-testcase.php | 0 .../includes/activity/class-test-activity.php | 0 .../activity/class-test-base-object.php | 0 .../activity/class-test-generic-object.php | 0 .../includes/class-test-activitypub.php | 0 .../tests}/includes/class-test-autoloader.php | 2 +- .../tests}/includes/class-test-blocks.php | 0 .../tests}/includes/class-test-comment.php | 0 .../tests}/includes/class-test-compat.php | 0 .../tests}/includes/class-test-dispatcher.php | 0 .../tests}/includes/class-test-embed.php | 0 .../tests}/includes/class-test-functions.php | 0 .../tests}/includes/class-test-handler.php | 0 .../tests}/includes/class-test-hashtag.php | 0 .../tests}/includes/class-test-link.php | 0 .../tests}/includes/class-test-mailer.php | 0 .../tests}/includes/class-test-mention.php | 8 ++-- .../tests}/includes/class-test-migration.php | 2 +- .../tests}/includes/class-test-moderation.php | 0 .../tests}/includes/class-test-move.php | 0 .../tests}/includes/class-test-options.php | 0 .../tests}/includes/class-test-post-types.php | 0 .../tests}/includes/class-test-query.php | 0 .../tests}/includes/class-test-router.php | 0 .../tests}/includes/class-test-sanitize.php | 0 .../tests}/includes/class-test-scheduler.php | 0 .../tests}/includes/class-test-search.php | 0 .../tests}/includes/class-test-shortcodes.php | 0 .../tests}/includes/class-test-signature.php | 2 +- .../tests}/includes/class-test-tombstone.php | 0 .../tests}/includes/class-test-webfinger.php | 0 .../includes/collection/class-test-actors.php | 0 .../collection/class-test-extra-fields.php | 0 .../collection/class-test-followers.php | 0 .../collection/class-test-following.php | 0 .../includes/collection/class-test-inbox.php | 0 .../collection/class-test-interactions.php | 0 .../includes/collection/class-test-outbox.php | 0 .../collection/class-test-remote-actors.php | 0 .../collection/class-test-replies.php | 0 .../includes/handler/class-test-accept.php | 0 .../includes/handler/class-test-announce.php | 0 .../includes/handler/class-test-create.php | 0 .../includes/handler/class-test-delete.php | 0 .../includes/handler/class-test-follow.php | 0 .../includes/handler/class-test-inbox.php | 0 .../includes/handler/class-test-like.php | 0 .../includes/handler/class-test-move.php | 0 .../handler/class-test-quote-request.php | 0 .../includes/handler/class-test-reject.php | 0 .../includes/handler/class-test-undo.php | 0 .../includes/handler/class-test-update.php | 0 .../tests}/includes/model/class-test-blog.php | 0 .../includes/model/class-test-follower.php | 0 .../tests}/includes/model/class-test-user.php | 2 +- .../rest/class-test-actors-controller.php | 0 .../class-test-actors-inbox-controller.php | 0 .../class-test-application-controller.php | 0 .../class-test-collections-controller.php | 0 .../rest/class-test-comments-controller.php | 0 .../rest/class-test-followers-controller.php | 0 .../rest/class-test-following-controller.php | 0 .../rest/class-test-inbox-controller.php | 0 .../class-test-interaction-controller.php | 0 .../rest/class-test-moderators-controller.php | 0 .../rest/class-test-nodeinfo-controller.php | 0 .../rest/class-test-outbox-controller.php | 0 .../rest/class-test-post-controller.php | 0 .../rest/class-test-replies-controller.php | 0 .../includes/rest/class-test-server.php | 0 .../rest/class-test-trait-collection.php | 0 .../rest/class-test-webfinger-controller.php | 0 .../includes/scheduler/class-test-actor.php | 4 +- .../includes/scheduler/class-test-comment.php | 0 .../includes/scheduler/class-test-post.php | 2 +- .../class-test-activity-object.php | 0 .../transformer/class-test-attachment.php | 0 .../includes/transformer/class-test-base.php | 0 .../transformer/class-test-comment.php | 2 +- .../transformer/class-test-factory.php | 0 .../includes/transformer/class-test-json.php | 0 .../includes/transformer/class-test-post.php | 4 +- .../wp-admin/class-test-health-check.php | 0 .../wp-admin/class-test-welcome-fields.php | 0 .../table/class-test-blocked-actors.php | 0 .../wp-admin/table/class-test-followers.php | 0 .../wp-admin/table/class-test-following.php | 0 .../tests}/integration/class-test-akismet.php | 0 .../class-test-enable-mastodon-apps.php | 0 .../tests}/integration/class-test-jetpack.php | 2 +- .../integration/class-test-nodeinfo.php | 0 ...class-test-seriously-simple-podcasting.php | 0 .../class-test-stream-connector.php | 0 .../tests}/integration/class-test-surge.php | 0 .../integration/class-test-webfinger.php | 0 .../integration/class-test-yoast-seo.php | 0 .../example-com-well-known-webfinger.json | 1 - tests/fixtures/http-signature-keys.json | 41 ------------------ tests/fixtures/lemmy-ml-u-pfefferle.json | 1 - .../lemmy-ml-well-known-webfinger.json | 1 - .../notiz-blog-author-matthias-pfefferle.json | 22 ---------- .../notiz-blog-well-known-webfinger.json | 22 ---------- 120 files changed, 163 insertions(+), 114 deletions(-) rename {tests => phpunit}/bootstrap.php (95%) rename {tests => phpunit/data}/assets/test.jpg (100%) rename {tests => phpunit}/data/class-autoload-test-file.php (100%) create mode 100644 phpunit/data/fixtures/example-com-well-known-webfinger.json create mode 100644 phpunit/data/fixtures/http-signature-keys.json create mode 100644 phpunit/data/fixtures/lemmy-ml-u-pfefferle.json create mode 100644 phpunit/data/fixtures/lemmy-ml-well-known-webfinger.json create mode 100644 phpunit/data/fixtures/notiz-blog-author-matthias-pfefferle.json create mode 100644 phpunit/data/fixtures/notiz-blog-well-known-webfinger.json rename {tests/data => phpunit/data/mocks}/class-jetpack.php (100%) rename {tests/data => phpunit/data/mocks}/class-manager.php (100%) rename {tests => phpunit/includes}/class-activitypub-outbox-testcase.php (100%) rename {tests => phpunit/includes}/class-activitypub-testcase-cache-http.php (95%) rename {tests => phpunit/includes}/class-activitypub-testcase-timer.php (100%) rename {tests => phpunit/includes}/class-test-rest-controller-testcase.php (100%) rename {tests => phpunit/tests}/includes/activity/class-test-activity.php (100%) rename {tests => phpunit/tests}/includes/activity/class-test-base-object.php (100%) rename {tests => phpunit/tests}/includes/activity/class-test-generic-object.php (100%) rename {tests => phpunit/tests}/includes/class-test-activitypub.php (100%) rename {tests => phpunit/tests}/includes/class-test-autoloader.php (97%) rename {tests => phpunit/tests}/includes/class-test-blocks.php (100%) rename {tests => phpunit/tests}/includes/class-test-comment.php (100%) rename {tests => phpunit/tests}/includes/class-test-compat.php (100%) rename {tests => phpunit/tests}/includes/class-test-dispatcher.php (100%) rename {tests => phpunit/tests}/includes/class-test-embed.php (100%) rename {tests => phpunit/tests}/includes/class-test-functions.php (100%) rename {tests => phpunit/tests}/includes/class-test-handler.php (100%) rename {tests => phpunit/tests}/includes/class-test-hashtag.php (100%) rename {tests => phpunit/tests}/includes/class-test-link.php (100%) rename {tests => phpunit/tests}/includes/class-test-mailer.php (100%) rename {tests => phpunit/tests}/includes/class-test-mention.php (92%) rename {tests => phpunit/tests}/includes/class-test-migration.php (99%) rename {tests => phpunit/tests}/includes/class-test-moderation.php (100%) rename {tests => phpunit/tests}/includes/class-test-move.php (100%) rename {tests => phpunit/tests}/includes/class-test-options.php (100%) rename {tests => phpunit/tests}/includes/class-test-post-types.php (100%) rename {tests => phpunit/tests}/includes/class-test-query.php (100%) rename {tests => phpunit/tests}/includes/class-test-router.php (100%) rename {tests => phpunit/tests}/includes/class-test-sanitize.php (100%) rename {tests => phpunit/tests}/includes/class-test-scheduler.php (100%) rename {tests => phpunit/tests}/includes/class-test-search.php (100%) rename {tests => phpunit/tests}/includes/class-test-shortcodes.php (100%) rename {tests => phpunit/tests}/includes/class-test-signature.php (99%) rename {tests => phpunit/tests}/includes/class-test-tombstone.php (100%) rename {tests => phpunit/tests}/includes/class-test-webfinger.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-actors.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-extra-fields.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-followers.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-following.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-inbox.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-interactions.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-outbox.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-remote-actors.php (100%) rename {tests => phpunit/tests}/includes/collection/class-test-replies.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-accept.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-announce.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-create.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-delete.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-follow.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-inbox.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-like.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-move.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-quote-request.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-reject.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-undo.php (100%) rename {tests => phpunit/tests}/includes/handler/class-test-update.php (100%) rename {tests => phpunit/tests}/includes/model/class-test-blog.php (100%) rename {tests => phpunit/tests}/includes/model/class-test-follower.php (100%) rename {tests => phpunit/tests}/includes/model/class-test-user.php (99%) rename {tests => phpunit/tests}/includes/rest/class-test-actors-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-actors-inbox-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-application-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-collections-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-comments-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-followers-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-following-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-inbox-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-interaction-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-moderators-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-nodeinfo-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-outbox-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-post-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-replies-controller.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-server.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-trait-collection.php (100%) rename {tests => phpunit/tests}/includes/rest/class-test-webfinger-controller.php (100%) rename {tests => phpunit/tests}/includes/scheduler/class-test-actor.php (99%) rename {tests => phpunit/tests}/includes/scheduler/class-test-comment.php (100%) rename {tests => phpunit/tests}/includes/scheduler/class-test-post.php (99%) rename {tests => phpunit/tests}/includes/transformer/class-test-activity-object.php (100%) rename {tests => phpunit/tests}/includes/transformer/class-test-attachment.php (100%) rename {tests => phpunit/tests}/includes/transformer/class-test-base.php (100%) rename {tests => phpunit/tests}/includes/transformer/class-test-comment.php (99%) rename {tests => phpunit/tests}/includes/transformer/class-test-factory.php (100%) rename {tests => phpunit/tests}/includes/transformer/class-test-json.php (100%) rename {tests => phpunit/tests}/includes/transformer/class-test-post.php (99%) rename {tests => phpunit/tests}/includes/wp-admin/class-test-health-check.php (100%) rename {tests => phpunit/tests}/includes/wp-admin/class-test-welcome-fields.php (100%) rename {tests => phpunit/tests}/includes/wp-admin/table/class-test-blocked-actors.php (100%) rename {tests => phpunit/tests}/includes/wp-admin/table/class-test-followers.php (100%) rename {tests => phpunit/tests}/includes/wp-admin/table/class-test-following.php (100%) rename {tests => phpunit/tests}/integration/class-test-akismet.php (100%) rename {tests => phpunit/tests}/integration/class-test-enable-mastodon-apps.php (100%) rename {tests => phpunit/tests}/integration/class-test-jetpack.php (99%) rename {tests => phpunit/tests}/integration/class-test-nodeinfo.php (100%) rename {tests => phpunit/tests}/integration/class-test-seriously-simple-podcasting.php (100%) rename {tests => phpunit/tests}/integration/class-test-stream-connector.php (100%) rename {tests => phpunit/tests}/integration/class-test-surge.php (100%) rename {tests => phpunit/tests}/integration/class-test-webfinger.php (100%) rename {tests => phpunit/tests}/integration/class-test-yoast-seo.php (100%) delete mode 100644 tests/fixtures/example-com-well-known-webfinger.json delete mode 100644 tests/fixtures/http-signature-keys.json delete mode 100644 tests/fixtures/lemmy-ml-u-pfefferle.json delete mode 100644 tests/fixtures/lemmy-ml-well-known-webfinger.json delete mode 100644 tests/fixtures/notiz-blog-author-matthias-pfefferle.json delete mode 100644 tests/fixtures/notiz-blog-well-known-webfinger.json diff --git a/.distignore b/.distignore index 897b5ecf8..184f2750a 100644 --- a/.distignore +++ b/.distignore @@ -45,5 +45,5 @@ README.md readme.md SECURITY.md src -tests +phpunit vendor diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 6189004bc..b7ea9ed36 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -145,7 +145,7 @@ jobs: # Extract just the method name from the full class::method METHOD_NAME=$(echo "$COVERS_TARGET" | sed 's/.*:://') echo "Extracted method name: $METHOD_NAME" - if TEST_FILE=$(find tests/ -name "*.php" -type f -exec grep -l "@covers.*$METHOD_NAME" {} \; | head -1); then + if TEST_FILE=$(find phpunit/tests/ -name "*.php" -type f -exec grep -l "@covers.*$METHOD_NAME" {} \; | head -1); then echo "Found test file: $TEST_FILE" if LINE_NUM=$(grep -n "@covers.*$METHOD_NAME" "$TEST_FILE" | head -1 | cut -d: -f1); then echo "Found line number: $LINE_NUM" diff --git a/docs/development-environment.md b/docs/development-environment.md index 2a2c19eb6..3f4ed149a 100644 --- a/docs/development-environment.md +++ b/docs/development-environment.md @@ -79,7 +79,7 @@ Both commands support additional PHPUnit arguments. Add them after `--`: npm run env-test -- --filter=test_migrate_to_4_1_0 # Run tests in a specific file -npm run env-test -- tests/includes/class-test-migration.php +npm run env-test -- phpunit/tests/includes/class-test-migration.php # Run tests with a specific group npm run env-test -- --group=migration diff --git a/phpunit.xml.dist b/phpunit.xml.dist index bba172961..b2935aa02 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,5 +1,5 @@ - ./tests + ./phpunit/tests - + diff --git a/tests/bootstrap.php b/phpunit/bootstrap.php similarity index 95% rename from tests/bootstrap.php rename to phpunit/bootstrap.php index 4ce67f307..a40c900e1 100644 --- a/tests/bootstrap.php +++ b/phpunit/bootstrap.php @@ -124,8 +124,8 @@ function tests_remove_outbox_rest( $args, $post_type ) { // Start up the WP testing environment. require $_tests_dir . '/includes/bootstrap.php'; -require __DIR__ . '/class-activitypub-outbox-testcase.php'; -require __DIR__ . '/class-activitypub-testcase-cache-http.php'; -require __DIR__ . '/class-test-rest-controller-testcase.php'; +require __DIR__ . '/includes/class-activitypub-outbox-testcase.php'; +require __DIR__ . '/includes/class-activitypub-testcase-cache-http.php'; +require __DIR__ . '/includes/class-test-rest-controller-testcase.php'; \Activitypub\Migration::add_default_settings(); diff --git a/tests/assets/test.jpg b/phpunit/data/assets/test.jpg similarity index 100% rename from tests/assets/test.jpg rename to phpunit/data/assets/test.jpg diff --git a/tests/data/class-autoload-test-file.php b/phpunit/data/class-autoload-test-file.php similarity index 100% rename from tests/data/class-autoload-test-file.php rename to phpunit/data/class-autoload-test-file.php diff --git a/phpunit/data/fixtures/example-com-well-known-webfinger.json b/phpunit/data/fixtures/example-com-well-known-webfinger.json new file mode 100644 index 000000000..684223f80 --- /dev/null +++ b/phpunit/data/fixtures/example-com-well-known-webfinger.json @@ -0,0 +1,18 @@ +{ + "headers": { + "content-encoding": "gzip", + "accept-ranges": "bytes", + "age": "600634", + "cache-control": "max-age=604800", + "content-type": "text/html; charset=UTF-8", + "date": "Fri, 03 May 2024 06:43:56 GMT", + "expires": "Fri, 10 May 2024 06:43:56 GMT", + "last-modified": "Fri, 26 Apr 2024 07:53:22 GMT", + "server": "ECAcc (dcd/7D09)", + "vary": "Accept-Encoding", + "x-cache": "404-HIT", + "content-length": "648" + }, + "body": "\n\n\n Example Domain\n\n \n \n \n \n\n\n\n
\n

Example Domain

\n

This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.

\n

More information...

\n
\n\n\n", + "response": { "code": 404 } +} diff --git a/phpunit/data/fixtures/http-signature-keys.json b/phpunit/data/fixtures/http-signature-keys.json new file mode 100644 index 000000000..369fd5fb5 --- /dev/null +++ b/phpunit/data/fixtures/http-signature-keys.json @@ -0,0 +1,41 @@ +{ + "ec": { + "prime256v1": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8w60yJODBTjpve9ocBaYA3VL/giZ\nGHD/mh4caWcuPdfqyeF4Hh2ulS9byRJtsfuGXFQriBORTaIU/vxQlZzQWw==\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIAMScM2YsFV6coA+wC36tJ9yeBGi117nHbRcAVQ/0dLDoAoGCCqGSM49\nAwEHoUQDQgAE8w60yJODBTjpve9ocBaYA3VL/giZGHD/mh4caWcuPdfqyeF4Hh2u\nlS9byRJtsfuGXFQriBORTaIU/vxQlZzQWw==\n-----END EC PRIVATE KEY-----\n", + "algo": 7 + }, + "secp384r1": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE1yZjhG8eYvOcI9M3R/mtNwdiflVKcqg2\njKD1lWwgqgrWsNXdYR4BUPcSr5Zc9z0xPdLfWx47qw+k/sIDBnalplKjglYqzy0a\nbAz9Q6ay4dMnhqevDuipZY/pCIZYi7yp\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMIGkAgEBBDCtUTFk3dzuj9p8CTUfGHuMNCHjBjpJF3Np6GB4kJefpklDu+2CNlcI\nPXrKp3qMXCWgBwYFK4EEACKhZANiAATXJmOEbx5i85wj0zdH+a03B2J+VUpyqDaM\noPWVbCCqCtaw1d1hHgFQ9xKvllz3PTE90t9bHjurD6T+wgMGdqWmUqOCVirPLRps\nDP1DprLh0yeGp68O6Kllj+kIhliLvKk=\n-----END EC PRIVATE KEY-----\n", + "algo": 8 + }, + "secp521r1": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBh5Qusx4oKP7vZOHPOBE2vzZI5TS8\nPw2vWSSfXlfKg10nd61GjG09HL8+urjTwD2XHFKucnWDlmPsnL3r2kikDJkByqZq\nzgPD619cEMWJR14jPX1Yj2gACTtMTrm7xElIF/2T27tymY2BlawR1S5pC+2Y3zuc\nQ1smx819jNn4gRSWFfw=\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMIHcAgEBBEIBV81ldPNoOGZwMdahdLlA9LewYJfMC24sMZSzzTJyO/JUQLDTChtr\nG45FWEspDqHfBYai9LGEg1CGJAJuNbKckDmgBwYFK4EEACOhgYkDgYYABAGHlC6z\nHigo/u9k4c84ETa/NkjlNLw/Da9ZJJ9eV8qDXSd3rUaMbT0cvz66uNPAPZccUq5y\ndYOWY+ycvevaSKQMmQHKpmrOA8PrX1wQxYlHXiM9fViPaAAJO0xOubvESUgX/ZPb\nu3KZjYGVrBHVLmkL7ZjfO5xDWybHzX2M2fiBFJYV/A==\n-----END EC PRIVATE KEY-----\n", + "algo": 9 + }, + "secp256k1": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE7HIhwVwFzSWrKMDHvEXaFbKLeb1luJ4G\n0pJFwyh3D4xhS81Q6bXkf6qax1HVwg1hf/yEUjaypcHD4DEhrR9kiA==\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHQCAQEEINVm73/bXz5ZCkRuJwpIvKpkm+5jXBadxCnSo4M5Yj1JoAcGBSuBBAAK\noUQDQgAE7HIhwVwFzSWrKMDHvEXaFbKLeb1luJ4G0pJFwyh3D4xhS81Q6bXkf6qa\nx1HVwg1hf/yEUjaypcHD4DEhrR9kiA==\n-----END EC PRIVATE KEY-----\n", + "algo": 7 + } + }, + "rsa": { + "2048": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoTGqpRmnGyoBJY8JcsiI\nEE7SvSINqvfjn/XRpWcwdowODiBIhP0xyuziC8lTikQquB+Rny+ftHjKlp1JwtC1\naW60wYSX38QPP1xJX8ERBKgtkYfo2XU8GV2bPx9+eJNXRMiPdHyyrhGln+ZIT3p9\nj20gjFIMrRz4QLqiJW+t1aPHcRysRiycenjimRAKw7q9gl7oXtYp66e52U3AYbmY\n38WikwXwoDUiuOS5DPJU78/yMryr3qDEYNaTgLMqHRG+z7Yn8B+nBcWeSQL2k0zZ\nJ8bWknA9OmvVO1VQnJVqUa6nivnKiWpt9f/yO1zauCLdg+9EDVocadMGlch/474U\nxwIDAQAB\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChMaqlGacbKgEl\njwlyyIgQTtK9Ig2q9+Of9dGlZzB2jA4OIEiE/THK7OILyVOKRCq4H5GfL5+0eMqW\nnUnC0LVpbrTBhJffxA8/XElfwREEqC2Rh+jZdTwZXZs/H354k1dEyI90fLKuEaWf\n5khPen2PbSCMUgytHPhAuqIlb63Vo8dxHKxGLJx6eOKZEArDur2CXuhe1inrp7nZ\nTcBhuZjfxaKTBfCgNSK45LkM8lTvz/IyvKveoMRg1pOAsyodEb7PtifwH6cFxZ5J\nAvaTTNknxtaScD06a9U7VVCclWpRrqeK+cqJam31//I7XNq4It2D70QNWhxp0waV\nyH/jvhTHAgMBAAECggEACHv+QOFoR8g+tjTgqO+AJeeYNQdJU+HnU8CTD9MuHFdD\n2B9/4awYBlfQkBFBOepbm0RiHFBb5hpjg2j0/HGS0uFWV0c83TTLHqkjXYxicm3N\ntDbEnUmL58PjC4ADXqJWuhKaZmW32+ym3JM45CIM4NM8HtakvynisTmBllnZ+wAl\n7w4TJdUmNt+U3FdXNX2rrvt/SKWqCAHCLEI2O0Wp/HvJRZJCR8EPc8k/oDxEFHg1\nOYDUkc9GQMQXl9KezG32GfxIv7g99r9N2j4bCnkvrADooQXMVPhIFvja5mWiE93P\nPkyO5+c4RKrBFl6Zf4oC/DmO3v5BY58PkawXGdNMNQKBgQDX9EMwKsnIIsqOBcAK\nPJE+9nJ5OnbMeGwZFNKP+12/AY1KftprFJZARrvAMcmIa2L2rEtRfDBK9x8SZfeM\nSorNw5poS+chEU8nh9TNjFki1hH3FWeKEVkMOZF8v5pz6EL0UKv7v8rr0hdKmFtE\nlvK7F58XmMq84obHE/oRlaZi3QKBgQC/Fdchy7uV49k+36nVfx5sbVWJvKmtQRSB\nCjanSpLS/gmbjLDSBYdE8FhwMV3Wl8YsRJL3aQTSnWGJyzJ17cgGUD65EsNAh2LK\nNFNufDrVzwwjb6TRrfHK9GkcY2p4byS+Y4taT+dCny0PmdOx8xBCBUOpWmPuByJz\nn/Zf6fLh8wKBgQCu22gfszWpKIqMDpndcAdHTPOJt04D56nXcSXBUY4pn48Q97/R\nHl0+dEeHqoh9Pj5mb0GZHA5aVNhC5G9Zl+3mB/CZbIQcIVDPOEuVl4OBEoZ/Y0Rv\n5fYNUPu9X8MnALRd8IghEr2yzmzviIe19OdbmBfIWn4mDOGGhmVgIaUUvQKBgAHw\nXct4/sFJm5W4vUduT8e34EtSf8JDS8r3aJCQACdl7oEGj3DCH5pCehNBXPtldNxU\nIc2i4iqk8C1uw2dQ71upCsnj99k6xnTYzRPs7Mfonu3pHxoFktOFYV+pXpY0QoIw\nDmTvNKCHbvSekfhXSA3zcblRMnxi1CWqNNzKSe2jAoGARPBS+EZVvC3csYVla6YU\nNcrJiTmyo2KdWwwQFQkjEjXXZkHQU6ao3zJMFyCEWJ1h+EJ3ry1gdMCm6Z0T+Z2j\n69YJnBN3AyUUb+rrpwnL++ZHakD5XUKYWPW+QMWQNOATlUlzW/4aPIVDRoFExK5x\ncyMghvMdiG8YybtfXMxvkog=\n-----END PRIVATE KEY-----\n", + "algo": 7 + }, + "3072": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAqZkSqLk+3Do2vFSvaqeR\nr6R620V4WAqEGuZcA/rhgu6/YihNKgdBqOyrOyhXoPn/2pAIa9lCqdHXxxXgMwEs\nBhmHGeFpze/w91BM36NVVO0BFbM/Vq4eSZyROO211RA11CNxbuPeWROmG/bIvAVD\n78Y71ldfq4cCs0I/SC2U74A8ubsuQ7A1EFVkGp/PPV3oGJb2eG927rhBIFoyYVZ3\npHLBAI2txuqf8sfGAEnMO3WaFf0lT1/YP+c4apvqg+dk9XaFbZbNSE1M/rlqsq/l\nOgbn+Qi0kmFOuTk1x7beUEMu4VGXsP2ehN4UjR/P9xuj6FG1+VTNAPPww1RsQgA3\nR2P+PJMkSTaclBsGOnjw0L9TXcNpTXED8Hq0/66Vif/9kvUjfhFc1vdhF9dz8nbn\n5d0ygPznCAIdTnrujyAmDFF2OBceZ6DQKmGP8SOTQDLUOnrZ3CzsmsPFlh+YbC8h\nAcwHpicVKwgUgp2OAUcNSWSakpCMCLTgjmpNcWuI1HUrAgMBAAE=\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCpmRKouT7cOja8\nVK9qp5GvpHrbRXhYCoQa5lwD+uGC7r9iKE0qB0Go7Ks7KFeg+f/akAhr2UKp0dfH\nFeAzASwGGYcZ4WnN7/D3UEzfo1VU7QEVsz9Wrh5JnJE47bXVEDXUI3Fu495ZE6Yb\n9si8BUPvxjvWV1+rhwKzQj9ILZTvgDy5uy5DsDUQVWQan889XegYlvZ4b3buuEEg\nWjJhVnekcsEAja3G6p/yx8YAScw7dZoV/SVPX9g/5zhqm+qD52T1doVtls1ITUz+\nuWqyr+U6Buf5CLSSYU65OTXHtt5QQy7hUZew/Z6E3hSNH8/3G6PoUbX5VM0A8/DD\nVGxCADdHY/48kyRJNpyUGwY6ePDQv1Ndw2lNcQPwerT/rpWJ//2S9SN+EVzW92EX\n13Pydufl3TKA/OcIAh1Oeu6PICYMUXY4Fx5noNAqYY/xI5NAMtQ6etncLOyaw8WW\nH5hsLyEBzAemJxUrCBSCnY4BRw1JZJqSkIwItOCOak1xa4jUdSsCAwEAAQKCAYAE\nGV8KFPAgAogwJRvYSBSNWjxd8F/oQNjQjaDLt9SbhYm6pZ631VUQ8CdzVpZHncNB\nVRnfAXFLCXddqHmyweR+gT9ysLAN+i6oy5gQD7KQSuorzBlLzwmMXexko9oxPCMQ\n7YpgU8GcBY2OP3i6kqYBtZjcpV/6lVjLXF6LMA7Zew/8rTmBCVE/A9FXk2U+5nYl\nogBzCL6nJmzsi0GMeLqLjvp7OPFqTWFwTMPMXfxBs6X1whiUwoxHfx8t9HbGmWEd\nOyNlauPGPIMyRbLHaz6YTp9Uy468SEA5BXBl8op+h7BT8ACBORKIrG/A0jlU7B8c\nTZniDvJ25RZiXkfR5ucgFCF/jjOwRUJQ8hPOGRMGBi/kOMeGYQFnAGbbqnoonbYx\naFpl/mH+SvpYfS5KKT+YACApUvdADVumKQHaafhxJ+KQi+GVVi5t+r29dsML+1Js\n6Jrzt0kqdCTn+ldEtAXy5hQe/bOp2cL7SYGvCdvwhbmUXDOTfb6pLe3BuEydKQEC\ngcEA0HFn5M4+A7FzYExLnJIA0SbBq9PZprg41eK6w657w6FD+lTGft4Fz24MgvUN\nH0TSYzDh4oH/WosPfUKI4uyDEpQ5W13WDhPtEN4h6jw2Qxm048UmOgogNlxRRmtx\nyp1sFITp4yan1DteyKxqADd87mGBGnzz8b4EzcOsFx9KdwwbjfTOFRQCttNhXkr+\nVkwISmxQdqQkxoIwWUXxqqkWBWgHRxN9vxHGmzp9rxurtGDMlu/osg0SIeIkHlcs\n5rVjAoHBANBK1Qpad9Ay5CigBbGWdKTM0Gp6GkzLRDpXi0bKQMKVLEFwdn4mvzbl\nnnZ0HDF2fWk3GfZdtW7i2uWjorIH5suO3iR9L3KUC5nM7qDnNtH5/w6SV+YQTHQC\nSoAoVvcAf4kES/kspghlR5EvHXJShzWW0X1EYcqIBdVL8cEVFUJ4eFUNSF45ckYd\nGI+IVmjfS+aENz5ifyTaQIf2N7fw7Ww5fkJWZRHfiyYD4GT9pbjyqCanHOxr+9mw\nagccYs3PmQKBwQCr0n/o7VXTZ4iK/flqJDSGNCN7x9Nnif5X2WFJAuDEv3+wsAc7\n9zrk5XtszCG3/9xJpbbeJ3jeIzlucNUz8fCN9R9ewHg9/JDz0Zg1ZNL59wvUoeRD\n/arWBL1+hf00HxZDx9igxXGdEh+s3es3KIZUXo20zwGr6Y4+K6kFGmcgwRtJpl3m\npCskmBRwTPNhIaXH64dcdSxXcmP2gyCWJHGhnUI6hcenJDkKJmoKWY3tz8l2Nmcj\ntoCW67oIRKYfu68CgcBaFyPSGJMd8AUTNTOBPiwxY4z5oNpjQL+/5EGPWsdr4g2E\nOFpn8eZeni5N2aagFjnkGjsWfi2NSn2XOZGTIyvF+4NFkQfGrRXfbe4AlkD1zQVu\njgmKrp4Cx0Ll74y9xO9kmgEqQw+FLhkoSJKZ8ewdV6BAaCVL7k1nljN4aeAKIgUZ\n9GbKqloszUTkP/nv3jT7/U/PodaQX/3tUKeE3aYzWyKrGqcYdfG/fYm+5J6bQglM\nvpcaAxKpc05IyRRLJHECgcEAyyk404F/4W4iV5Mg1/k5YZQ6M0KJsHo1XxdmTKHt\n9JiuA36WeAzUJuUfVNK1YgvLh11a4gEYashnh9teHq7G638GKUYLDu8HOfGw6BFJ\npiBjSCWvScB2xIw4DP8z8Es5nKqgw3inziWWwXrbHJafPatqshEtAJHXKnPw4GhN\nV0CdHfO3rnlPxaL1bHp2v1MEbgN40jXyiTX0TjwNVePInWVm3WE3DjVvoX1qFsI3\n3jqsI9Cam0Rqzpifts6BrbAP\n-----END PRIVATE KEY-----\n", + "algo": 8 + }, + "4096": { + "public_key": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsZgBI+A4oHBTznGyTZlN\ncdHg/O5q8MKmoTKOXP374oJ6ubzKEEOr4E1RGf+hFOUrPTj9OCnyOJ3K63Dh0hXg\nM2RNOtJzU1upFUozlqxCGaKO69DaDIXwWYSXEaaVkIvWHYtwh8iD35B15lcIG57m\nkIkYloJybZD1W4JBzDObfuoUvLKfYGxGu3CLlDJbhgPH28UAYjMMVknAoMdYJuk6\ncTTMja69HCm5fnH3oQj/cwkcvfM6J5OhvvUZs7cdHQ1ySG4isMS5ymeMqaOeRKQz\nnkRQYjxys12b+NM+oYih0gQL4kl1Qu/cUs+xrDlxXj2LvQDnsTg/KXfgKYhAYYAc\nCBh//LHfFpx0OBUKEIN6D7S4PJLIV3hx6vMJOAFJFF74APZRQy/4LWYMq3Y4JCiE\nCpwOyBBoceoNUSRziHuEIgb/1IQWtlDteB7pkUom40u3D2wH+z4+2KFV+Y3yYzFM\nB+ogNm0qt+Kze7v8tKrOgCf1QQZfFq5EgyfAYpB3xT1v+dpURiq4d3rDeDFzm+47\nH7tXrrTYzbEIaI4Ow1ukCcfAFGWobj4/DIs/QOFhi9x+MXT9CIR1MlsGAIUIrhpK\nYapVkpMO5z3xyzNpJ6FvkSIhnqRAPt0FG5cfOtuQdVgWvvhjuB+0ALTPFCEFe1uR\nka2V981W+HJ/WqgcVVR7Y3cCAwEAAQ==\n-----END PUBLIC KEY-----\n", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCxmAEj4DigcFPO\ncbJNmU1x0eD87mrwwqahMo5c/fvignq5vMoQQ6vgTVEZ/6EU5Ss9OP04KfI4ncrr\ncOHSFeAzZE060nNTW6kVSjOWrEIZoo7r0NoMhfBZhJcRppWQi9Ydi3CHyIPfkHXm\nVwgbnuaQiRiWgnJtkPVbgkHMM5t+6hS8sp9gbEa7cIuUMluGA8fbxQBiMwxWScCg\nx1gm6TpxNMyNrr0cKbl+cfehCP9zCRy98zonk6G+9Rmztx0dDXJIbiKwxLnKZ4yp\no55EpDOeRFBiPHKzXZv40z6hiKHSBAviSXVC79xSz7GsOXFePYu9AOexOD8pd+Ap\niEBhgBwIGH/8sd8WnHQ4FQoQg3oPtLg8kshXeHHq8wk4AUkUXvgA9lFDL/gtZgyr\ndjgkKIQKnA7IEGhx6g1RJHOIe4QiBv/UhBa2UO14HumRSibjS7cPbAf7Pj7YoVX5\njfJjMUwH6iA2bSq34rN7u/y0qs6AJ/VBBl8WrkSDJ8BikHfFPW/52lRGKrh3esN4\nMXOb7jsfu1eutNjNsQhojg7DW6QJx8AUZahuPj8Miz9A4WGL3H4xdP0IhHUyWwYA\nhQiuGkphqlWSkw7nPfHLM2knoW+RIiGepEA+3QUblx8625B1WBa++GO4H7QAtM8U\nIQV7W5GRrZX3zVb4cn9aqBxVVHtjdwIDAQABAoICACCpsc/83b1YW3mVPLN79hvw\ne35ZhU6ppkbwivF8fxa+Y78Eg29xWsvCvJ9Y/jHfIlA8yonJYTTbhKY/2TCv+E/L\na07dxPs4WQVC4/Ea1n9rf/jMLUZvXfDA654B8vEmXueJLVWz4dk88wo9yI5377T2\nmhCYhl4zcoT1lI9vkHJLsCuyeJCd6XZw8SL9Dgs8Z8Y6WeM1u1elcenAMCzb6XVH\nvjVyxXJIFEc2w9IY2w63xtMCyJfd1bpOzv7YN2EQB4xdwUCctgUNfXf30VSTlLDP\npK8kqf3mQhkGFTdVb1m2h88DLq90eSO78lQYLoskK67D21kjXK6OTyqkVh74lm7x\n8toWEmIs6EQ5L3VAcAaeoanULojid9rb2YnOSNq8NwBKVfNqK/rrrwyhnBwW8Co3\nyNi5Q1EdsXUoRVowd0L8+NvBhc/D9PZqm+kiMF2q3zBcLFol/amO2ABMsBPxbcqD\niL7FlyLLJLd5lwXxyEz1Xq6olhmHiqNn7SSCSEDVYB1MofxXg5dmE7IbjP3G4Kxj\nF+4INrcjj89vUsy9wadhTV1sBU/n76HU5i88JS34nIdJQIsb7Pm4vqee9EuljdI5\n73sXX5a6WvZGE+Hu4KqWbk2nonJF9dpxn9VR4mVQmxSHtWjkzNXtCzOl/QFyp+GM\nto9IFsIis3qQB/OJ54mxAoIBAQDqwVgiqxfgcv0I7Pfb+VXCvezteZpuAVTsxWSZ\nbzgkVu7ZXwFwra/VaaNRhWM7u8DSvEc87wLOO2PRB9vPSFJKRX53qbUWrlBD0s2a\nOiSnBnRUCW9UB08YgBMiCzviqPOwyfQ5QYSOJBeU02YRT1IEgX/YbOzzp7MPFtkk\nyuG1NQGTreqQs1z7M/xTLG4krIEzY5xa75I+NSmNBud0hgqe/5gDEewsX+uGF3dm\nkL3P5uglbpLW/uFuqRuY5h9oRhRADQh7WoSkn4gegOKyVQEzhra5zCMLViRriW/v\nVUyBC8dnDRuOJ7vrwqHMyb2n6Iwbg2+H9GiMKCpeYbaYM0SnAoIBAQDBqmFiF8Y2\nUcPLGSsiV1zlN8w+2vGmGnTVscDz+u2s0wjYismWRVEhWNPyLVFN4UsdalJ7JFgN\nzQubePXKai/hLTjDUink0e2TUQx4TQBUU21OXxHA6WukGBZXrP0d0KXRjzbShemN\nTIeKaNox2NWEQUJWKpzkeyEm+d+Tpsp1CtbfeiD+XQMZr/QuEcyXaenLj1WJX8oa\nRZAs33YzSrN/WOZ2xTEyympmJC8p0upoPxAu+CrYCIJZ/9cHruvkzJD1j95seZAE\n2TsbEC0sTQE3h8HpHQWFPi4CR9vQQVXza35qlvZnT1yxJwXOX6AEce9aXHFiHANg\nCRwZt/7gETSxAoIBAETHSsw1dnRjHDF+RAwl2/OHc6AL7avnJfuMxbGSfU9gTPBQ\nvnpF2Otc3OWof+9jTdYwJWr718WWbuMyOztaxAlQnQHwLccsYQXOAED8YfqxkGmC\nriRfU9QoyfJCelQpDeSw9qXDxVNjzajj2tadd7ksO8mr+CxW6MY1+n6mFkTh98lN\nvhiRBF/w1i+EJ+0EwYHN4GRgJmelabwQ1sUz9G6rEd1sZdaGb9nEjE33gDUmQMOe\nxtTIrkGeuCAu4+rIBWzSpLaHSa91sgrF1iVLdGOlR2neHjJXFaqQBMSJKDXyvoQ5\nueYHTC6BwqfeP3uvTUVOV+HsQKk3p1oppLao5qcCggEAKJHpvqPeWQi97HEEUThd\n9ILA3bX+A17tdMq88h9x5M98vegtHLa+rS6vj78gliEJHEtmpfdSHuoCcXpgexvN\nle1kQ76VmiLEEyVaaGUxGXk0n8NYs8HyU7jcDVfm2nUYF5NZ17ZH29rZVgxrESAs\ncn09SVG59j85DbIwvPym0ugHZV9vQ/n2KU5r567A3kNIv+Tx9UpEy0YhUtUpLMuM\nWLQl62GZ0dsHeQhBfRB7HIWBfWVtjD4UGIh44lopfo/AGkEeRjkdC3b6Y8v6upoT\nFC/zVkNHIceJ2d511OWq/Mha/jdLvQ6qC05yb+4mVmgLzTEqa3QU3Oxrn5Ok6AmS\nsQKCAQEAhQ+lmWkp0qmLEJpYeX8Ct14NGPEEeUs8v/0AIzkYvMFMoRsXqnVwmAko\nyVu+szQiV/4SIet6UF53TyGaBJ15EfZAorOfWdMTlvO5Iz7hpTe/9z5W7tuk4iGR\npcxUYKc3tJg9Yp5M6y2lWzLVUHtc/2LiP1OUAxeDDmhhYSR7MIiuIg5yKAYbW04B\navIh+uDEjO2iv5jWrtBBpCAPSzBOX5qRFSbs419dnpmpatPY4hPMSNyOQCfBEScL\nr6fcsDq19iUgP2tu9GGIotwbw0kpaTtwvl+i/kxeNmPAx7zK2evuXfp1Gue4jsoa\nB+4qZpx1tNgmByE6xwy1BX7GmcYu8Q==\n-----END PRIVATE KEY-----\n", + "algo": 9 + } + } +} diff --git a/phpunit/data/fixtures/lemmy-ml-u-pfefferle.json b/phpunit/data/fixtures/lemmy-ml-u-pfefferle.json new file mode 100644 index 000000000..db0d4fa3f --- /dev/null +++ b/phpunit/data/fixtures/lemmy-ml-u-pfefferle.json @@ -0,0 +1,17 @@ +{ + "headers": { + "server": "nginx", + "date": "Fri, 03 May 2024 06:39:09 GMT", + "content-type": "application/activity+json", + "vary": "accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers", + "content-encoding": "br", + "access-control-expose-headers": "content-type, content-encoding, vary", + "cache-control": "public, max-age=60", + "referrer-policy": "same-origin", + "x-content-type-options": "nosniff", + "x-frame-options": "DENY", + "x-xss-protection": "1; mode=block" + }, + "body": "{\n \"@context\": [\n \"https://join-lemmy.org/context.json\",\n \"https://www.w3.org/ns/activitystreams\"\n ],\n \"type\": \"Person\",\n \"id\": \"https://lemmy.ml/u/pfefferle\",\n \"preferredUsername\": \"pfefferle\",\n \"inbox\": \"https://lemmy.ml/u/pfefferle/inbox\",\n \"outbox\": \"https://lemmy.ml/u/pfefferle/outbox\",\n \"publicKey\": {\n \"id\": \"https://lemmy.ml/u/pfefferle#main-key\",\n \"owner\": \"https://lemmy.ml/u/pfefferle\",\n \"publicKeyPem\": \"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4hFg+F0bW4w1n+uAVOWI\\nX45CpXJ1T13xEXehtcqa3ieiN099TnJRfHySNLhZ6Yn4tn5oo+4nUvpX+lM1OpYC\\nRl1fbB9M4dSyBjMBSVFTffZ6QQ9dpB84pgifHY9EqTCiA38lf+dNIskv0tzqQQ8o\\nvTejDH73jUcjTe9CJuW2H1EdtbqL1Et7kNpU+nQQkx7m+LKNIG80UTkrgREZNz+o\\n1SJ3FkxstmQZQ8l+fMPfmFcUOFYpaBwwl1MaR1bLLjBRHOSBCDA1eNvncGfiODwX\\n0RhnUh/QFXRgMIzuHK0XWWWVvje3yVEnA0Vllc7THAL7x9M/ptz2j5dec98UlKiC\\niwIDAQAB\\n-----END PUBLIC KEY-----\\n\"\n },\n \"endpoints\": {\n \"sharedInbox\": \"https://lemmy.ml/inbox\"\n },\n \"published\": \"2020-01-07T08:09:09.600169Z\"\n}", + "response": { "code": 200 } +} diff --git a/phpunit/data/fixtures/lemmy-ml-well-known-webfinger.json b/phpunit/data/fixtures/lemmy-ml-well-known-webfinger.json new file mode 100644 index 000000000..8d4ece38e --- /dev/null +++ b/phpunit/data/fixtures/lemmy-ml-well-known-webfinger.json @@ -0,0 +1,17 @@ +{ + "headers": { + "server": "nginx", + "date": "Fri, 03 May 2024 06:39:09 GMT", + "content-type": "application/json", + "access-control-expose-headers": "content-type, cache-control, vary, content-encoding", + "content-encoding": "br", + "vary": "accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers", + "cache-control": "public, max-age=259200", + "referrer-policy": "same-origin", + "x-content-type-options": "nosniff", + "x-frame-options": "DENY", + "x-xss-protection": "1; mode=block" + }, + "body": "{\"subject\":\"acct:pfefferle@lemmy.ml\",\"links\":[{\"rel\":\"http://webfinger.net/rel/profile-page\",\"type\":\"text/html\",\"href\":\"https://lemmy.ml/u/pfefferle\",\"template\":null},{\"rel\":\"self\",\"type\":\"application/activity+json\",\"href\":\"https://lemmy.ml/u/pfefferle\",\"template\":null,\"properties\":{\"https://www.w3.org/ns/activitystreams#type\":\"Person\"}},{\"rel\":\"http://ostatus.org/schema/1.0/subscribe\",\"type\":null,\"href\":null,\"template\":\"https://lemmy.ml/activitypub/externalInteraction?uri={uri}\"}]}", + "response": { "code": 200 } +} diff --git a/phpunit/data/fixtures/notiz-blog-author-matthias-pfefferle.json b/phpunit/data/fixtures/notiz-blog-author-matthias-pfefferle.json new file mode 100644 index 000000000..64b92df85 --- /dev/null +++ b/phpunit/data/fixtures/notiz-blog-author-matthias-pfefferle.json @@ -0,0 +1,22 @@ +{ + "headers": { + "date": "Fri, 09 Dec 2022 10:39:51 GMT", + "content-type": "application/activity+json", + "server": "nginx", + "x-xrds-location": "https://notiz.blog/?xrds", + "x-yadis-location": "https://notiz.blog/?xrds", + "link": "; rel=\"micropub_media\", ; rel=\"micropub\", ; rel=\"friends-base-url\", ; rel=\"authorization_endpoint\", ; rel=\"token_endpoint\", ; rel=\"indieauth-metadata\", ; rel=\"https://api.w.org/\", ; rel=\"alternate\"; type=\"application/json\"", + "cache-control": "max-age=0, public", + "expires": "Fri, 09 Dec 2022 10:39:51 GMT", + "x-xss-protection": "1; mode=block", + "x-content-type-options": "nosniff", + "strict-transport-security": "max-age=31536000", + "x-frame-options": "SAMEORIGIN", + "referrer-policy": "strict-origin-when-cross-origin", + "x-clacks-overhead": "GNU Terry Pratchett" + }, + "body": "{\"@context\":[\"https:\\/\\/www.w3.org\\/ns\\/activitystreams\",\"https:\\/\\/w3id.org\\/security\\/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"PropertyValue\":\"schema:PropertyValue\",\"schema\":\"http:\\/\\/schema.org#\",\"pt\":\"https:\\/\\/joinpeertube.org\\/ns#\",\"toot\":\"http:\\/\\/joinmastodon.org\\/ns#\",\"value\":\"schema:value\",\"Hashtag\":\"as:Hashtag\",\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"featuredTags\":{\"@id\":\"toot:featuredTags\",\"@type\":\"@id\"}}],\"id\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\",\"type\":\"Person\",\"name\":\"Matthias Pfefferle\",\"summary\":\"Ich bin Webworker und arbeite als \\u0022Head of WordPress Development\\u0022 f\\u00fcr IONOS in Karlsruhe. Ich blogge, podcaste und schreibe \\u003Cdel\\u003Eeine Kolumne\\u003C\\/del\\u003E \\u00fcber das open, independent und federated social Web. \\u003Ca href=\\u0022https:\\/\\/notiz.blog\\/about\\/\\u0022\\u003EMehr \\u00fcber mich.\\u003C\\/a\\u003E\",\"preferredUsername\":\"pfefferle\",\"url\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\",\"icon\":{\"type\":\"Image\",\"url\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/75512bb584bbceae57dfc503692b16b2?s=120\\u0026d=mm\\u0026r=g\"},\"image\":{\"type\":\"Image\",\"url\":\"https:\\/\\/notiz.blog\\/wp-content\\/uploads\\/2017\\/02\\/cropped-Unknown-2.jpeg\"},\"inbox\":\"https:\\/\\/notiz.blog\\/wp-api\\/activitypub\\/1.0\\/users\\/1\\/inbox\",\"outbox\":\"https:\\/\\/notiz.blog\\/wp-api\\/activitypub\\/1.0\\/users\\/1\\/outbox\",\"followers\":\"https:\\/\\/notiz.blog\\/wp-api\\/activitypub\\/1.0\\/users\\/1\\/followers\",\"following\":\"https:\\/\\/notiz.blog\\/wp-api\\/activitypub\\/1.0\\/users\\/1\\/following\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/#main-key\",\"owner\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA039CnlArzn6nsRjcC2RJ\\nrjY3K5ZrLnFUbPtHLGNXMJUGW+rFYE1DzhdKPTj9giiXE+J7ADI0Tme5rSWw14bT\\nLhOMBs2ma8d03\\/wnF1+kxDBeRyvyoki2TjtiJdoPu1jwZLLYTuzWTXdDiqrwSKOL\\nncKFGIkjyzOLoYuIKPgIuFg3Mt8rI6teQ2Q65YsGvOG\\/mjBOUwl5FjgcGt9aQARd\\nmFxW5XydxfNrCZwuE34Zbq\\/IC7rvaUx98zvrEHrD237YQ8O4M3afC9Kbu5Xp7k8Q\\n5JG80RItV7n8xjyt0i9LaVwlZDDYmLDYv50VhjcwRvtVFVfaN7yxDnHttd1NNENK\\nCwIDAQAB\\n-----END PUBLIC KEY-----\"},\"tag\":[],\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"Blog\",\"value\":\"\\u003Ca rel=\\u0022me\\u0022 title=\\u0022https:\\/\\/notiz.blog\\/\\u0022 target=\\u0022_blank\\u0022 href=\\u0022https:\\/\\/notiz.blog\\/\\u0022\\u003Enotiz.blog\\u003C\\/a\\u003E\"},{\"type\":\"PropertyValue\",\"name\":\"Profil\",\"value\":\"\\u003Ca rel=\\u0022me\\u0022 title=\\u0022https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\\u0022 target=\\u0022_blank\\u0022 href=\\u0022https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\\u0022\\u003Enotiz.blog\\u003C\\/a\\u003E\"},{\"type\":\"PropertyValue\",\"name\":\"Website\",\"value\":\"\\u003Ca rel=\\u0022me\\u0022 title=\\u0022https:\\/\\/pfefferle.org\\/\\u0022 target=\\u0022_blank\\u0022 href=\\u0022https:\\/\\/pfefferle.org\\/\\u0022\\u003Epfefferle.org\\u003C\\/a\\u003E\"}]}", + "response": { + "code": 200 + } +} diff --git a/phpunit/data/fixtures/notiz-blog-well-known-webfinger.json b/phpunit/data/fixtures/notiz-blog-well-known-webfinger.json new file mode 100644 index 000000000..02809594b --- /dev/null +++ b/phpunit/data/fixtures/notiz-blog-well-known-webfinger.json @@ -0,0 +1,22 @@ +{ + "headers": { + "date": "Fri, 09 Dec 2022 10:39:51 GMT", + "content-type": "application/jrd+json; charset=UTF-8", + "server": "nginx", + "x-xrds-location": "https://notiz.blog/?xrds", + "x-yadis-location": "https://notiz.blog/?xrds", + "access-control-allow-origin": "*", + "cache-control": "max-age=2592000, public", + "expires": "Sun, 08 Jan 2023 10:39:50 GMT", + "x-xss-protection": "1; mode=block", + "x-content-type-options": "nosniff", + "strict-transport-security": "max-age=31536000", + "x-frame-options": "SAMEORIGIN", + "referrer-policy": "strict-origin-when-cross-origin", + "x-clacks-overhead": "GNU Terry Pratchett" + }, + "body": "{\"subject\":\"acct:pfefferle@notiz.blog\",\"aliases\":[\"acct:pfefferle@notiz.blog\",\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\",\"mailto:pfefferle@notiz.blog\"],\"links\":[{\"rel\":\"http:\\/\\/webfinger.net\\/rel\\/profile-page\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\",\"type\":\"text\\/html\"},{\"rel\":\"http:\\/\\/webfinger.net\\/rel\\/avatar\",\"href\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/75512bb584bbceae57dfc503692b16b2?s=96&d=mm&r=g\"},{\"rel\":\"http:\\/\\/webfinger.net\\/rel\\/profile-page\",\"href\":\"https:\\/\\/pfefferle.org\\/\",\"type\":\"text\\/html\"},{\"rel\":\"payment\",\"href\":\"https:\\/\\/www.paypal.me\\/matthiaspfefferle\"},{\"rel\":\"payment\",\"href\":\"https:\\/\\/liberapay.com\\/pfefferle\\/\"},{\"rel\":\"payment\",\"href\":\"https:\\/\\/notiz.blog\\/donate\\/\"},{\"rel\":\"payment\",\"href\":\"https:\\/\\/flattr.com\\/@pfefferle\"},{\"href\":\"https:\\/\\/notiz.blog\\/\",\"rel\":\"http:\\/\\/specs.openid.net\\/auth\\/2.0\\/provider\"},{\"rel\":\"self\",\"type\":\"application\\/activity+json\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/\"},{\"rel\":\"micropub_media\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/micropub\\/1.0\\/media\"},{\"rel\":\"micropub\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/micropub\\/1.0\\/endpoint\"},{\"rel\":\"http:\\/\\/nodeinfo.diaspora.software\\/ns\\/schema\\/2.0\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/nodeinfo\\/2.0\"},{\"rel\":\"http:\\/\\/nodeinfo.diaspora.software\\/ns\\/schema\\/1.1\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/nodeinfo\\/1.1\"},{\"rel\":\"http:\\/\\/nodeinfo.diaspora.software\\/ns\\/schema\\/1.0\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/nodeinfo\\/1.0\"},{\"rel\":\"https:\\/\\/feneas.org\\/ns\\/serviceinfo\",\"type\":\"application\\/ld+json\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/serviceinfo\\/1.0\",\"properties\":{\"https:\\/\\/feneas.org\\/ns\\/serviceinfo#software.name\":\"notizBlog\"}},{\"rel\":\"http:\\/\\/schemas.google.com\\/g\\/2010#updates-from\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/feed\\/ostatus\\/\",\"type\":\"application\\/atom+xml\"},{\"rel\":\"http:\\/\\/ostatus.org\\/schema\\/1.0\\/subscribe\",\"template\":\"https:\\/\\/notiz.blog\\/?profile={uri}\"},{\"rel\":\"magic-public-key\",\"href\":\"data:application\\/magic-public-key,RSA.039CnlArzn6nsRjcC2RJrjY3K5ZrLnFUbPtHLGNXMJUGW-rFYE1DzhdKPTj9giiXE-J7ADI0Tme5rSWw14bTLhOMBs2ma8d03_wnF1-kxDBeRyvyoki2TjtiJdoPu1jwZLLYTuzWTXdDiqrwSKOLncKFGIkjyzOLoYuIKPgIuFg3Mt8rI6teQ2Q65YsGvOG_mjBOUwl5FjgcGt9aQARdmFxW5XydxfNrCZwuE34Zbq_IC7rvaUx98zvrEHrD237YQ8O4M3afC9Kbu5Xp7k8Q5JG80RItV7n8xjyt0i9LaVwlZDDYmLDYv50VhjcwRvtVFVfaN7yxDnHttd1NNENKCw==.AQAB\"},{\"rel\":\"salmon\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/?salmon=endpoint\"},{\"rel\":\"http:\\/\\/salmon-protocol.org\\/ns\\/salmon-replies\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/?salmon=endpoint\"},{\"rel\":\"http:\\/\\/salmon-protocol.org\\/ns\\/salmon-mention\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/?salmon=endpoint\"},{\"rel\":\"feed\",\"type\":\"application\\/stream+json\",\"title\":\"Activity-Streams 1.0 Feed\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/feed\\/as1\\/\"},{\"rel\":\"feed\",\"type\":\"application\\/activity+json\",\"title\":\"Activity-Streams 2.0 Feed\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/feed\\/as2\\/\"},{\"rel\":\"http:\\/\\/oexchange.org\\/spec\\/0.8\\/rel\\/user-target\",\"href\":\"https:\\/\\/notiz.blog\\/?oexchange=xrd\",\"type\":\"application\\/xrd+xml\"},{\"rel\":\"http:\\/\\/a9.com\\/-\\/spec\\/opensearch\\/1.1\\/\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/opensearch\\/1.1\\/document\",\"type\":\"application\\/opensearchdescription+xml\"},{\"rel\":\"describedby\",\"href\":\"https:\\/\\/notiz.blog\\/author\\/matthias-pfefferle\\/feed\\/foaf\\/\",\"type\":\"application\\/rdf+xml\"},{\"rel\":\"webmention\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/webmention\\/1.0\\/endpoint\"},{\"rel\":\"http:\\/\\/webmention.org\\/\",\"href\":\"https:\\/\\/notiz.blog\\/wp-api\\/webmention\\/1.0\\/endpoint\"}],\"properties\":{\"http:\\/\\/salmon-protocol.org\\/ns\\/magic-key\":\"RSA.039CnlArzn6nsRjcC2RJrjY3K5ZrLnFUbPtHLGNXMJUGW-rFYE1DzhdKPTj9giiXE-J7ADI0Tme5rSWw14bTLhOMBs2ma8d03_wnF1-kxDBeRyvyoki2TjtiJdoPu1jwZLLYTuzWTXdDiqrwSKOLncKFGIkjyzOLoYuIKPgIuFg3Mt8rI6teQ2Q65YsGvOG_mjBOUwl5FjgcGt9aQARdmFxW5XydxfNrCZwuE34Zbq_IC7rvaUx98zvrEHrD237YQ8O4M3afC9Kbu5Xp7k8Q5JG80RItV7n8xjyt0i9LaVwlZDDYmLDYv50VhjcwRvtVFVfaN7yxDnHttd1NNENKCw==.AQAB\"}}", + "response": { + "code": 200 + } +} diff --git a/tests/data/class-jetpack.php b/phpunit/data/mocks/class-jetpack.php similarity index 100% rename from tests/data/class-jetpack.php rename to phpunit/data/mocks/class-jetpack.php diff --git a/tests/data/class-manager.php b/phpunit/data/mocks/class-manager.php similarity index 100% rename from tests/data/class-manager.php rename to phpunit/data/mocks/class-manager.php diff --git a/tests/class-activitypub-outbox-testcase.php b/phpunit/includes/class-activitypub-outbox-testcase.php similarity index 100% rename from tests/class-activitypub-outbox-testcase.php rename to phpunit/includes/class-activitypub-outbox-testcase.php diff --git a/tests/class-activitypub-testcase-cache-http.php b/phpunit/includes/class-activitypub-testcase-cache-http.php similarity index 95% rename from tests/class-activitypub-testcase-cache-http.php rename to phpunit/includes/class-activitypub-testcase-cache-http.php index 9523af63c..0d73c0c55 100644 --- a/tests/class-activitypub-testcase-cache-http.php +++ b/phpunit/includes/class-activitypub-testcase-cache-http.php @@ -65,7 +65,7 @@ public function tear_down() { */ public static function pre_http_request( $preempt, $request, $url ) { $p = wp_parse_url( $url ); - $cache = __DIR__ . '/fixtures/' . sanitize_title( $p['host'] . '-' . $p['path'] ) . '.json'; + $cache = AP_TESTS_DIR . '/data/fixtures/' . sanitize_title( $p['host'] . '-' . $p['path'] ) . '.json'; if ( file_exists( $cache ) ) { return apply_filters( 'fake_http_response', @@ -134,7 +134,7 @@ public static function pre_http_request( $preempt, $request, $url ) { */ public static function http_response( $response, $args, $url ) { $p = wp_parse_url( $url ); - $cache = __DIR__ . '/fixtures/' . sanitize_title( $p['host'] . '-' . $p['path'] ) . '.json'; + $cache = AP_TESTS_DIR . '/data/fixtures/' . sanitize_title( $p['host'] . '-' . $p['path'] ) . '.json'; if ( ! file_exists( $cache ) ) { $headers = wp_remote_retrieve_headers( $response ); file_put_contents( // phpcs:ignore WordPress.WP.AlternativeFunctions diff --git a/tests/class-activitypub-testcase-timer.php b/phpunit/includes/class-activitypub-testcase-timer.php similarity index 100% rename from tests/class-activitypub-testcase-timer.php rename to phpunit/includes/class-activitypub-testcase-timer.php diff --git a/tests/class-test-rest-controller-testcase.php b/phpunit/includes/class-test-rest-controller-testcase.php similarity index 100% rename from tests/class-test-rest-controller-testcase.php rename to phpunit/includes/class-test-rest-controller-testcase.php diff --git a/tests/includes/activity/class-test-activity.php b/phpunit/tests/includes/activity/class-test-activity.php similarity index 100% rename from tests/includes/activity/class-test-activity.php rename to phpunit/tests/includes/activity/class-test-activity.php diff --git a/tests/includes/activity/class-test-base-object.php b/phpunit/tests/includes/activity/class-test-base-object.php similarity index 100% rename from tests/includes/activity/class-test-base-object.php rename to phpunit/tests/includes/activity/class-test-base-object.php diff --git a/tests/includes/activity/class-test-generic-object.php b/phpunit/tests/includes/activity/class-test-generic-object.php similarity index 100% rename from tests/includes/activity/class-test-generic-object.php rename to phpunit/tests/includes/activity/class-test-generic-object.php diff --git a/tests/includes/class-test-activitypub.php b/phpunit/tests/includes/class-test-activitypub.php similarity index 100% rename from tests/includes/class-test-activitypub.php rename to phpunit/tests/includes/class-test-activitypub.php diff --git a/tests/includes/class-test-autoloader.php b/phpunit/tests/includes/class-test-autoloader.php similarity index 97% rename from tests/includes/class-test-autoloader.php rename to phpunit/tests/includes/class-test-autoloader.php index b2d796684..92cab63d6 100644 --- a/tests/includes/class-test-autoloader.php +++ b/phpunit/tests/includes/class-test-autoloader.php @@ -69,7 +69,7 @@ public function test_register_path() { * @covers ::load */ public function test_load() { - $autoloader = new Autoloader( __NAMESPACE__, dirname( __DIR__ ) ); + $autoloader = new Autoloader( __NAMESPACE__, AP_TESTS_DIR ); // Wrong prefix. $autoloader->load( 'Activitypub\Autoload_Test_File' ); diff --git a/tests/includes/class-test-blocks.php b/phpunit/tests/includes/class-test-blocks.php similarity index 100% rename from tests/includes/class-test-blocks.php rename to phpunit/tests/includes/class-test-blocks.php diff --git a/tests/includes/class-test-comment.php b/phpunit/tests/includes/class-test-comment.php similarity index 100% rename from tests/includes/class-test-comment.php rename to phpunit/tests/includes/class-test-comment.php diff --git a/tests/includes/class-test-compat.php b/phpunit/tests/includes/class-test-compat.php similarity index 100% rename from tests/includes/class-test-compat.php rename to phpunit/tests/includes/class-test-compat.php diff --git a/tests/includes/class-test-dispatcher.php b/phpunit/tests/includes/class-test-dispatcher.php similarity index 100% rename from tests/includes/class-test-dispatcher.php rename to phpunit/tests/includes/class-test-dispatcher.php diff --git a/tests/includes/class-test-embed.php b/phpunit/tests/includes/class-test-embed.php similarity index 100% rename from tests/includes/class-test-embed.php rename to phpunit/tests/includes/class-test-embed.php diff --git a/tests/includes/class-test-functions.php b/phpunit/tests/includes/class-test-functions.php similarity index 100% rename from tests/includes/class-test-functions.php rename to phpunit/tests/includes/class-test-functions.php diff --git a/tests/includes/class-test-handler.php b/phpunit/tests/includes/class-test-handler.php similarity index 100% rename from tests/includes/class-test-handler.php rename to phpunit/tests/includes/class-test-handler.php diff --git a/tests/includes/class-test-hashtag.php b/phpunit/tests/includes/class-test-hashtag.php similarity index 100% rename from tests/includes/class-test-hashtag.php rename to phpunit/tests/includes/class-test-hashtag.php diff --git a/tests/includes/class-test-link.php b/phpunit/tests/includes/class-test-link.php similarity index 100% rename from tests/includes/class-test-link.php rename to phpunit/tests/includes/class-test-link.php diff --git a/tests/includes/class-test-mailer.php b/phpunit/tests/includes/class-test-mailer.php similarity index 100% rename from tests/includes/class-test-mailer.php rename to phpunit/tests/includes/class-test-mailer.php diff --git a/tests/includes/class-test-mention.php b/phpunit/tests/includes/class-test-mention.php similarity index 92% rename from tests/includes/class-test-mention.php rename to phpunit/tests/includes/class-test-mention.php index 71f149759..b98c4103b 100644 --- a/tests/includes/class-test-mention.php +++ b/phpunit/tests/includes/class-test-mention.php @@ -102,22 +102,22 @@ public function pre_http_request( $response, $parsed_args, $url ) { // Mock responses for remote users. if ( 'https://notiz.blog/.well-known/webfinger?resource=acct%3Apfefferle%40notiz.blog' === $url ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - return json_decode( file_get_contents( AP_TESTS_DIR . '/fixtures/notiz-blog-well-known-webfinger.json' ), true ); + return json_decode( file_get_contents( AP_TESTS_DIR . '/data/fixtures/notiz-blog-well-known-webfinger.json' ), true ); } if ( 'https://lemmy.ml/.well-known/webfinger?resource=acct%3Apfefferle%40lemmy.ml' === $url ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - return json_decode( file_get_contents( AP_TESTS_DIR . '/fixtures/lemmy-ml-well-known-webfinger.json' ), true ); + return json_decode( file_get_contents( AP_TESTS_DIR . '/data/fixtures/lemmy-ml-well-known-webfinger.json' ), true ); } if ( 'https://notiz.blog/author/matthias-pfefferle/' === $url ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - return json_decode( file_get_contents( AP_TESTS_DIR . '/fixtures/notiz-blog-author-matthias-pfefferle.json' ), true ); + return json_decode( file_get_contents( AP_TESTS_DIR . '/data/fixtures/notiz-blog-author-matthias-pfefferle.json' ), true ); } if ( 'https://lemmy.ml/u/pfefferle' === $url ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - return json_decode( file_get_contents( AP_TESTS_DIR . '/fixtures/lemmy-ml-u-pfefferle.json' ), true ); + return json_decode( file_get_contents( AP_TESTS_DIR . '/data/fixtures/lemmy-ml-u-pfefferle.json' ), true ); } return $response; diff --git a/tests/includes/class-test-migration.php b/phpunit/tests/includes/class-test-migration.php similarity index 99% rename from tests/includes/class-test-migration.php rename to phpunit/tests/includes/class-test-migration.php index cc687248e..64b4eb9b5 100644 --- a/tests/includes/class-test-migration.php +++ b/phpunit/tests/includes/class-test-migration.php @@ -38,7 +38,7 @@ class Test_Migration extends \WP_UnitTestCase { public static function set_up_before_class() { // Mock Jetpack class if it doesn't exist. if ( ! class_exists( 'Jetpack' ) ) { - require_once AP_TESTS_DIR . '/data/class-jetpack.php'; + require_once AP_TESTS_DIR . '/data/mocks/class-jetpack.php'; } \remove_action( 'wp_after_insert_post', array( \Activitypub\Scheduler\Post::class, 'schedule_post_activity' ), 33 ); diff --git a/tests/includes/class-test-moderation.php b/phpunit/tests/includes/class-test-moderation.php similarity index 100% rename from tests/includes/class-test-moderation.php rename to phpunit/tests/includes/class-test-moderation.php diff --git a/tests/includes/class-test-move.php b/phpunit/tests/includes/class-test-move.php similarity index 100% rename from tests/includes/class-test-move.php rename to phpunit/tests/includes/class-test-move.php diff --git a/tests/includes/class-test-options.php b/phpunit/tests/includes/class-test-options.php similarity index 100% rename from tests/includes/class-test-options.php rename to phpunit/tests/includes/class-test-options.php diff --git a/tests/includes/class-test-post-types.php b/phpunit/tests/includes/class-test-post-types.php similarity index 100% rename from tests/includes/class-test-post-types.php rename to phpunit/tests/includes/class-test-post-types.php diff --git a/tests/includes/class-test-query.php b/phpunit/tests/includes/class-test-query.php similarity index 100% rename from tests/includes/class-test-query.php rename to phpunit/tests/includes/class-test-query.php diff --git a/tests/includes/class-test-router.php b/phpunit/tests/includes/class-test-router.php similarity index 100% rename from tests/includes/class-test-router.php rename to phpunit/tests/includes/class-test-router.php diff --git a/tests/includes/class-test-sanitize.php b/phpunit/tests/includes/class-test-sanitize.php similarity index 100% rename from tests/includes/class-test-sanitize.php rename to phpunit/tests/includes/class-test-sanitize.php diff --git a/tests/includes/class-test-scheduler.php b/phpunit/tests/includes/class-test-scheduler.php similarity index 100% rename from tests/includes/class-test-scheduler.php rename to phpunit/tests/includes/class-test-scheduler.php diff --git a/tests/includes/class-test-search.php b/phpunit/tests/includes/class-test-search.php similarity index 100% rename from tests/includes/class-test-search.php rename to phpunit/tests/includes/class-test-search.php diff --git a/tests/includes/class-test-shortcodes.php b/phpunit/tests/includes/class-test-shortcodes.php similarity index 100% rename from tests/includes/class-test-shortcodes.php rename to phpunit/tests/includes/class-test-shortcodes.php diff --git a/tests/includes/class-test-signature.php b/phpunit/tests/includes/class-test-signature.php similarity index 99% rename from tests/includes/class-test-signature.php rename to phpunit/tests/includes/class-test-signature.php index 35f12cdbe..7b0e9d138 100644 --- a/tests/includes/class-test-signature.php +++ b/phpunit/tests/includes/class-test-signature.php @@ -33,7 +33,7 @@ public static function set_up_before_class() { parent::set_up_before_class(); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents - self::$test_keys = \json_decode( \file_get_contents( \dirname( __DIR__ ) . '/fixtures/http-signature-keys.json' ), true ); + self::$test_keys = \json_decode( \file_get_contents( AP_TESTS_DIR . '/data/fixtures/http-signature-keys.json' ), true ); } /** diff --git a/tests/includes/class-test-tombstone.php b/phpunit/tests/includes/class-test-tombstone.php similarity index 100% rename from tests/includes/class-test-tombstone.php rename to phpunit/tests/includes/class-test-tombstone.php diff --git a/tests/includes/class-test-webfinger.php b/phpunit/tests/includes/class-test-webfinger.php similarity index 100% rename from tests/includes/class-test-webfinger.php rename to phpunit/tests/includes/class-test-webfinger.php diff --git a/tests/includes/collection/class-test-actors.php b/phpunit/tests/includes/collection/class-test-actors.php similarity index 100% rename from tests/includes/collection/class-test-actors.php rename to phpunit/tests/includes/collection/class-test-actors.php diff --git a/tests/includes/collection/class-test-extra-fields.php b/phpunit/tests/includes/collection/class-test-extra-fields.php similarity index 100% rename from tests/includes/collection/class-test-extra-fields.php rename to phpunit/tests/includes/collection/class-test-extra-fields.php diff --git a/tests/includes/collection/class-test-followers.php b/phpunit/tests/includes/collection/class-test-followers.php similarity index 100% rename from tests/includes/collection/class-test-followers.php rename to phpunit/tests/includes/collection/class-test-followers.php diff --git a/tests/includes/collection/class-test-following.php b/phpunit/tests/includes/collection/class-test-following.php similarity index 100% rename from tests/includes/collection/class-test-following.php rename to phpunit/tests/includes/collection/class-test-following.php diff --git a/tests/includes/collection/class-test-inbox.php b/phpunit/tests/includes/collection/class-test-inbox.php similarity index 100% rename from tests/includes/collection/class-test-inbox.php rename to phpunit/tests/includes/collection/class-test-inbox.php diff --git a/tests/includes/collection/class-test-interactions.php b/phpunit/tests/includes/collection/class-test-interactions.php similarity index 100% rename from tests/includes/collection/class-test-interactions.php rename to phpunit/tests/includes/collection/class-test-interactions.php diff --git a/tests/includes/collection/class-test-outbox.php b/phpunit/tests/includes/collection/class-test-outbox.php similarity index 100% rename from tests/includes/collection/class-test-outbox.php rename to phpunit/tests/includes/collection/class-test-outbox.php diff --git a/tests/includes/collection/class-test-remote-actors.php b/phpunit/tests/includes/collection/class-test-remote-actors.php similarity index 100% rename from tests/includes/collection/class-test-remote-actors.php rename to phpunit/tests/includes/collection/class-test-remote-actors.php diff --git a/tests/includes/collection/class-test-replies.php b/phpunit/tests/includes/collection/class-test-replies.php similarity index 100% rename from tests/includes/collection/class-test-replies.php rename to phpunit/tests/includes/collection/class-test-replies.php diff --git a/tests/includes/handler/class-test-accept.php b/phpunit/tests/includes/handler/class-test-accept.php similarity index 100% rename from tests/includes/handler/class-test-accept.php rename to phpunit/tests/includes/handler/class-test-accept.php diff --git a/tests/includes/handler/class-test-announce.php b/phpunit/tests/includes/handler/class-test-announce.php similarity index 100% rename from tests/includes/handler/class-test-announce.php rename to phpunit/tests/includes/handler/class-test-announce.php diff --git a/tests/includes/handler/class-test-create.php b/phpunit/tests/includes/handler/class-test-create.php similarity index 100% rename from tests/includes/handler/class-test-create.php rename to phpunit/tests/includes/handler/class-test-create.php diff --git a/tests/includes/handler/class-test-delete.php b/phpunit/tests/includes/handler/class-test-delete.php similarity index 100% rename from tests/includes/handler/class-test-delete.php rename to phpunit/tests/includes/handler/class-test-delete.php diff --git a/tests/includes/handler/class-test-follow.php b/phpunit/tests/includes/handler/class-test-follow.php similarity index 100% rename from tests/includes/handler/class-test-follow.php rename to phpunit/tests/includes/handler/class-test-follow.php diff --git a/tests/includes/handler/class-test-inbox.php b/phpunit/tests/includes/handler/class-test-inbox.php similarity index 100% rename from tests/includes/handler/class-test-inbox.php rename to phpunit/tests/includes/handler/class-test-inbox.php diff --git a/tests/includes/handler/class-test-like.php b/phpunit/tests/includes/handler/class-test-like.php similarity index 100% rename from tests/includes/handler/class-test-like.php rename to phpunit/tests/includes/handler/class-test-like.php diff --git a/tests/includes/handler/class-test-move.php b/phpunit/tests/includes/handler/class-test-move.php similarity index 100% rename from tests/includes/handler/class-test-move.php rename to phpunit/tests/includes/handler/class-test-move.php diff --git a/tests/includes/handler/class-test-quote-request.php b/phpunit/tests/includes/handler/class-test-quote-request.php similarity index 100% rename from tests/includes/handler/class-test-quote-request.php rename to phpunit/tests/includes/handler/class-test-quote-request.php diff --git a/tests/includes/handler/class-test-reject.php b/phpunit/tests/includes/handler/class-test-reject.php similarity index 100% rename from tests/includes/handler/class-test-reject.php rename to phpunit/tests/includes/handler/class-test-reject.php diff --git a/tests/includes/handler/class-test-undo.php b/phpunit/tests/includes/handler/class-test-undo.php similarity index 100% rename from tests/includes/handler/class-test-undo.php rename to phpunit/tests/includes/handler/class-test-undo.php diff --git a/tests/includes/handler/class-test-update.php b/phpunit/tests/includes/handler/class-test-update.php similarity index 100% rename from tests/includes/handler/class-test-update.php rename to phpunit/tests/includes/handler/class-test-update.php diff --git a/tests/includes/model/class-test-blog.php b/phpunit/tests/includes/model/class-test-blog.php similarity index 100% rename from tests/includes/model/class-test-blog.php rename to phpunit/tests/includes/model/class-test-blog.php diff --git a/tests/includes/model/class-test-follower.php b/phpunit/tests/includes/model/class-test-follower.php similarity index 100% rename from tests/includes/model/class-test-follower.php rename to phpunit/tests/includes/model/class-test-follower.php diff --git a/tests/includes/model/class-test-user.php b/phpunit/tests/includes/model/class-test-user.php similarity index 99% rename from tests/includes/model/class-test-user.php rename to phpunit/tests/includes/model/class-test-user.php index 56234dc6d..ed2dc7a8b 100644 --- a/tests/includes/model/class-test-user.php +++ b/phpunit/tests/includes/model/class-test-user.php @@ -98,7 +98,7 @@ public function test_icon() { $user = User::from_wp_user( $user_id ); // Add attachment. - $attachment_id = self::factory()->attachment->create_upload_object( AP_TESTS_DIR . '/assets/test.jpg' ); + $attachment_id = self::factory()->attachment->create_upload_object( AP_TESTS_DIR . '/data/assets/test.jpg' ); // Navigate to attachment page. $this->go_to( get_attachment_link( $attachment_id ) ); diff --git a/tests/includes/rest/class-test-actors-controller.php b/phpunit/tests/includes/rest/class-test-actors-controller.php similarity index 100% rename from tests/includes/rest/class-test-actors-controller.php rename to phpunit/tests/includes/rest/class-test-actors-controller.php diff --git a/tests/includes/rest/class-test-actors-inbox-controller.php b/phpunit/tests/includes/rest/class-test-actors-inbox-controller.php similarity index 100% rename from tests/includes/rest/class-test-actors-inbox-controller.php rename to phpunit/tests/includes/rest/class-test-actors-inbox-controller.php diff --git a/tests/includes/rest/class-test-application-controller.php b/phpunit/tests/includes/rest/class-test-application-controller.php similarity index 100% rename from tests/includes/rest/class-test-application-controller.php rename to phpunit/tests/includes/rest/class-test-application-controller.php diff --git a/tests/includes/rest/class-test-collections-controller.php b/phpunit/tests/includes/rest/class-test-collections-controller.php similarity index 100% rename from tests/includes/rest/class-test-collections-controller.php rename to phpunit/tests/includes/rest/class-test-collections-controller.php diff --git a/tests/includes/rest/class-test-comments-controller.php b/phpunit/tests/includes/rest/class-test-comments-controller.php similarity index 100% rename from tests/includes/rest/class-test-comments-controller.php rename to phpunit/tests/includes/rest/class-test-comments-controller.php diff --git a/tests/includes/rest/class-test-followers-controller.php b/phpunit/tests/includes/rest/class-test-followers-controller.php similarity index 100% rename from tests/includes/rest/class-test-followers-controller.php rename to phpunit/tests/includes/rest/class-test-followers-controller.php diff --git a/tests/includes/rest/class-test-following-controller.php b/phpunit/tests/includes/rest/class-test-following-controller.php similarity index 100% rename from tests/includes/rest/class-test-following-controller.php rename to phpunit/tests/includes/rest/class-test-following-controller.php diff --git a/tests/includes/rest/class-test-inbox-controller.php b/phpunit/tests/includes/rest/class-test-inbox-controller.php similarity index 100% rename from tests/includes/rest/class-test-inbox-controller.php rename to phpunit/tests/includes/rest/class-test-inbox-controller.php diff --git a/tests/includes/rest/class-test-interaction-controller.php b/phpunit/tests/includes/rest/class-test-interaction-controller.php similarity index 100% rename from tests/includes/rest/class-test-interaction-controller.php rename to phpunit/tests/includes/rest/class-test-interaction-controller.php diff --git a/tests/includes/rest/class-test-moderators-controller.php b/phpunit/tests/includes/rest/class-test-moderators-controller.php similarity index 100% rename from tests/includes/rest/class-test-moderators-controller.php rename to phpunit/tests/includes/rest/class-test-moderators-controller.php diff --git a/tests/includes/rest/class-test-nodeinfo-controller.php b/phpunit/tests/includes/rest/class-test-nodeinfo-controller.php similarity index 100% rename from tests/includes/rest/class-test-nodeinfo-controller.php rename to phpunit/tests/includes/rest/class-test-nodeinfo-controller.php diff --git a/tests/includes/rest/class-test-outbox-controller.php b/phpunit/tests/includes/rest/class-test-outbox-controller.php similarity index 100% rename from tests/includes/rest/class-test-outbox-controller.php rename to phpunit/tests/includes/rest/class-test-outbox-controller.php diff --git a/tests/includes/rest/class-test-post-controller.php b/phpunit/tests/includes/rest/class-test-post-controller.php similarity index 100% rename from tests/includes/rest/class-test-post-controller.php rename to phpunit/tests/includes/rest/class-test-post-controller.php diff --git a/tests/includes/rest/class-test-replies-controller.php b/phpunit/tests/includes/rest/class-test-replies-controller.php similarity index 100% rename from tests/includes/rest/class-test-replies-controller.php rename to phpunit/tests/includes/rest/class-test-replies-controller.php diff --git a/tests/includes/rest/class-test-server.php b/phpunit/tests/includes/rest/class-test-server.php similarity index 100% rename from tests/includes/rest/class-test-server.php rename to phpunit/tests/includes/rest/class-test-server.php diff --git a/tests/includes/rest/class-test-trait-collection.php b/phpunit/tests/includes/rest/class-test-trait-collection.php similarity index 100% rename from tests/includes/rest/class-test-trait-collection.php rename to phpunit/tests/includes/rest/class-test-trait-collection.php diff --git a/tests/includes/rest/class-test-webfinger-controller.php b/phpunit/tests/includes/rest/class-test-webfinger-controller.php similarity index 100% rename from tests/includes/rest/class-test-webfinger-controller.php rename to phpunit/tests/includes/rest/class-test-webfinger-controller.php diff --git a/tests/includes/scheduler/class-test-actor.php b/phpunit/tests/includes/scheduler/class-test-actor.php similarity index 99% rename from tests/includes/scheduler/class-test-actor.php rename to phpunit/tests/includes/scheduler/class-test-actor.php index 1df4e32de..e9245b016 100644 --- a/tests/includes/scheduler/class-test-actor.php +++ b/phpunit/tests/includes/scheduler/class-test-actor.php @@ -81,7 +81,7 @@ public function test_user_option_update() { \wp_delete_post( $post->ID, true ); } - $attachment_id = self::factory()->attachment->create_upload_object( dirname( __DIR__, 2 ) . '/assets/test.jpg' ); + $attachment_id = self::factory()->attachment->create_upload_object( AP_TESTS_DIR . '/data/assets/test.jpg' ); // Update activitypub_description. $actor->update_summary( 'test summary' ); @@ -168,7 +168,7 @@ public function test_blog_user_image_updates( $field, $option ) { \update_option( 'activitypub_actor_mode', ACTIVITYPUB_ACTOR_AND_BLOG_MODE ); Actor::init(); - $attachment_id = self::factory()->attachment->create_upload_object( dirname( __DIR__, 2 ) . '/assets/test.jpg' ); + $attachment_id = self::factory()->attachment->create_upload_object( AP_TESTS_DIR . '/data/assets/test.jpg' ); \update_option( $option, $attachment_id ); $expected = array( diff --git a/tests/includes/scheduler/class-test-comment.php b/phpunit/tests/includes/scheduler/class-test-comment.php similarity index 100% rename from tests/includes/scheduler/class-test-comment.php rename to phpunit/tests/includes/scheduler/class-test-comment.php diff --git a/tests/includes/scheduler/class-test-post.php b/phpunit/tests/includes/scheduler/class-test-post.php similarity index 99% rename from tests/includes/scheduler/class-test-post.php rename to phpunit/tests/includes/scheduler/class-test-post.php index a0e8fb624..7180713c6 100644 --- a/tests/includes/scheduler/class-test-post.php +++ b/phpunit/tests/includes/scheduler/class-test-post.php @@ -26,7 +26,7 @@ public function test_transition_attachment_status() { wp_set_current_user( self::$user_id ); // Create. - $post_id = self::factory()->attachment->create_upload_object( dirname( __DIR__, 2 ) . '/assets/test.jpg' ); + $post_id = self::factory()->attachment->create_upload_object( AP_TESTS_DIR . '/data/assets/test.jpg' ); $activitypub_id = \add_query_arg( 'p', $post_id, \home_url( '/' ) ); $outbox_item = $this->get_latest_outbox_item( $activitypub_id ); diff --git a/tests/includes/transformer/class-test-activity-object.php b/phpunit/tests/includes/transformer/class-test-activity-object.php similarity index 100% rename from tests/includes/transformer/class-test-activity-object.php rename to phpunit/tests/includes/transformer/class-test-activity-object.php diff --git a/tests/includes/transformer/class-test-attachment.php b/phpunit/tests/includes/transformer/class-test-attachment.php similarity index 100% rename from tests/includes/transformer/class-test-attachment.php rename to phpunit/tests/includes/transformer/class-test-attachment.php diff --git a/tests/includes/transformer/class-test-base.php b/phpunit/tests/includes/transformer/class-test-base.php similarity index 100% rename from tests/includes/transformer/class-test-base.php rename to phpunit/tests/includes/transformer/class-test-base.php diff --git a/tests/includes/transformer/class-test-comment.php b/phpunit/tests/includes/transformer/class-test-comment.php similarity index 99% rename from tests/includes/transformer/class-test-comment.php rename to phpunit/tests/includes/transformer/class-test-comment.php index 4d7204520..aa16461d1 100644 --- a/tests/includes/transformer/class-test-comment.php +++ b/phpunit/tests/includes/transformer/class-test-comment.php @@ -146,7 +146,7 @@ public static function pre_http_request( $data, $parsed_args, $url ) { public function test_comment_image_attachments() { // Create a test image attachment. $attachment_id = self::factory()->attachment->create_upload_object( - ACTIVITYPUB_PLUGIN_DIR . '/tests/assets/test.jpg', + AP_TESTS_DIR . '/data/assets/test.jpg', self::$post_id ); diff --git a/tests/includes/transformer/class-test-factory.php b/phpunit/tests/includes/transformer/class-test-factory.php similarity index 100% rename from tests/includes/transformer/class-test-factory.php rename to phpunit/tests/includes/transformer/class-test-factory.php diff --git a/tests/includes/transformer/class-test-json.php b/phpunit/tests/includes/transformer/class-test-json.php similarity index 100% rename from tests/includes/transformer/class-test-json.php rename to phpunit/tests/includes/transformer/class-test-json.php diff --git a/tests/includes/transformer/class-test-post.php b/phpunit/tests/includes/transformer/class-test-post.php similarity index 99% rename from tests/includes/transformer/class-test-post.php rename to phpunit/tests/includes/transformer/class-test-post.php index b01f1704d..a3bff78ef 100644 --- a/tests/includes/transformer/class-test-post.php +++ b/phpunit/tests/includes/transformer/class-test-post.php @@ -300,7 +300,7 @@ public function test_content_visibility() { * @covers ::to_object */ public function test_block_attachments_with_fallback() { - $attachment_id = $this->create_upload_object( dirname( __DIR__, 2 ) . '/assets/test.jpg' ); + $attachment_id = $this->create_upload_object( AP_TESTS_DIR . '/data/assets/test.jpg' ); $attachment_src = \wp_get_attachment_image_src( $attachment_id ); $post_id = \wp_insert_post( @@ -507,7 +507,7 @@ public function test_get_icon() { $post = get_post( $post_id ); // Create test image. - $attachment_id = $this->create_upload_object( dirname( __DIR__, 2 ) . '/assets/test.jpg' ); + $attachment_id = $this->create_upload_object( AP_TESTS_DIR . '/data/assets/test.jpg' ); // Set up reflection method. $reflection = new \ReflectionClass( Post::class ); diff --git a/tests/includes/wp-admin/class-test-health-check.php b/phpunit/tests/includes/wp-admin/class-test-health-check.php similarity index 100% rename from tests/includes/wp-admin/class-test-health-check.php rename to phpunit/tests/includes/wp-admin/class-test-health-check.php diff --git a/tests/includes/wp-admin/class-test-welcome-fields.php b/phpunit/tests/includes/wp-admin/class-test-welcome-fields.php similarity index 100% rename from tests/includes/wp-admin/class-test-welcome-fields.php rename to phpunit/tests/includes/wp-admin/class-test-welcome-fields.php diff --git a/tests/includes/wp-admin/table/class-test-blocked-actors.php b/phpunit/tests/includes/wp-admin/table/class-test-blocked-actors.php similarity index 100% rename from tests/includes/wp-admin/table/class-test-blocked-actors.php rename to phpunit/tests/includes/wp-admin/table/class-test-blocked-actors.php diff --git a/tests/includes/wp-admin/table/class-test-followers.php b/phpunit/tests/includes/wp-admin/table/class-test-followers.php similarity index 100% rename from tests/includes/wp-admin/table/class-test-followers.php rename to phpunit/tests/includes/wp-admin/table/class-test-followers.php diff --git a/tests/includes/wp-admin/table/class-test-following.php b/phpunit/tests/includes/wp-admin/table/class-test-following.php similarity index 100% rename from tests/includes/wp-admin/table/class-test-following.php rename to phpunit/tests/includes/wp-admin/table/class-test-following.php diff --git a/tests/integration/class-test-akismet.php b/phpunit/tests/integration/class-test-akismet.php similarity index 100% rename from tests/integration/class-test-akismet.php rename to phpunit/tests/integration/class-test-akismet.php diff --git a/tests/integration/class-test-enable-mastodon-apps.php b/phpunit/tests/integration/class-test-enable-mastodon-apps.php similarity index 100% rename from tests/integration/class-test-enable-mastodon-apps.php rename to phpunit/tests/integration/class-test-enable-mastodon-apps.php diff --git a/tests/integration/class-test-jetpack.php b/phpunit/tests/integration/class-test-jetpack.php similarity index 99% rename from tests/integration/class-test-jetpack.php rename to phpunit/tests/integration/class-test-jetpack.php index b42671439..5692bf326 100644 --- a/tests/integration/class-test-jetpack.php +++ b/phpunit/tests/integration/class-test-jetpack.php @@ -59,7 +59,7 @@ public static function wpSetUpBeforeClass( $factory ) { */ private function load_mock_manager() { if ( ! class_exists( '\Automattic\Jetpack\Connection\Manager' ) ) { - require_once AP_TESTS_DIR . '/data/class-manager.php'; + require_once AP_TESTS_DIR . '/data/mocks/class-manager.php'; } } diff --git a/tests/integration/class-test-nodeinfo.php b/phpunit/tests/integration/class-test-nodeinfo.php similarity index 100% rename from tests/integration/class-test-nodeinfo.php rename to phpunit/tests/integration/class-test-nodeinfo.php diff --git a/tests/integration/class-test-seriously-simple-podcasting.php b/phpunit/tests/integration/class-test-seriously-simple-podcasting.php similarity index 100% rename from tests/integration/class-test-seriously-simple-podcasting.php rename to phpunit/tests/integration/class-test-seriously-simple-podcasting.php diff --git a/tests/integration/class-test-stream-connector.php b/phpunit/tests/integration/class-test-stream-connector.php similarity index 100% rename from tests/integration/class-test-stream-connector.php rename to phpunit/tests/integration/class-test-stream-connector.php diff --git a/tests/integration/class-test-surge.php b/phpunit/tests/integration/class-test-surge.php similarity index 100% rename from tests/integration/class-test-surge.php rename to phpunit/tests/integration/class-test-surge.php diff --git a/tests/integration/class-test-webfinger.php b/phpunit/tests/integration/class-test-webfinger.php similarity index 100% rename from tests/integration/class-test-webfinger.php rename to phpunit/tests/integration/class-test-webfinger.php diff --git a/tests/integration/class-test-yoast-seo.php b/phpunit/tests/integration/class-test-yoast-seo.php similarity index 100% rename from tests/integration/class-test-yoast-seo.php rename to phpunit/tests/integration/class-test-yoast-seo.php diff --git a/tests/fixtures/example-com-well-known-webfinger.json b/tests/fixtures/example-com-well-known-webfinger.json deleted file mode 100644 index 28941cc85..000000000 --- a/tests/fixtures/example-com-well-known-webfinger.json +++ /dev/null @@ -1 +0,0 @@ -{"headers":{"content-encoding":"gzip","accept-ranges":"bytes","age":"600634","cache-control":"max-age=604800","content-type":"text\/html; charset=UTF-8","date":"Fri, 03 May 2024 06:43:56 GMT","expires":"Fri, 10 May 2024 06:43:56 GMT","last-modified":"Fri, 26 Apr 2024 07:53:22 GMT","server":"ECAcc (dcd\/7D09)","vary":"Accept-Encoding","x-cache":"404-HIT","content-length":"648"},"body":"\n\n\n Example Domain<\/title>\n\n <meta charset=\"utf-8\" \/>\n <meta http-equiv=\"Content-type\" content=\"text\/html; charset=utf-8\" \/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n <style type=\"text\/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n <\/style> \n<\/head>\n\n<body>\n<div>\n <h1>Example Domain<\/h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.<\/p>\n <p><a href=\"https:\/\/www.iana.org\/domains\/example\">More information...<\/a><\/p>\n<\/div>\n<\/body>\n<\/html>\n","response":{"code":404}} \ No newline at end of file diff --git a/tests/fixtures/http-signature-keys.json b/tests/fixtures/http-signature-keys.json deleted file mode 100644 index 5ef6c3b92..000000000 --- a/tests/fixtures/http-signature-keys.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "ec": { - "prime256v1": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8w60yJODBTjpve9ocBaYA3VL\/giZ\nGHD\/mh4caWcuPdfqyeF4Hh2ulS9byRJtsfuGXFQriBORTaIU\/vxQlZzQWw==\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIAMScM2YsFV6coA+wC36tJ9yeBGi117nHbRcAVQ\/0dLDoAoGCCqGSM49\nAwEHoUQDQgAE8w60yJODBTjpve9ocBaYA3VL\/giZGHD\/mh4caWcuPdfqyeF4Hh2u\nlS9byRJtsfuGXFQriBORTaIU\/vxQlZzQWw==\n-----END EC PRIVATE KEY-----\n", - "algo": 7 - }, - "secp384r1": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE1yZjhG8eYvOcI9M3R\/mtNwdiflVKcqg2\njKD1lWwgqgrWsNXdYR4BUPcSr5Zc9z0xPdLfWx47qw+k\/sIDBnalplKjglYqzy0a\nbAz9Q6ay4dMnhqevDuipZY\/pCIZYi7yp\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN EC PRIVATE KEY-----\nMIGkAgEBBDCtUTFk3dzuj9p8CTUfGHuMNCHjBjpJF3Np6GB4kJefpklDu+2CNlcI\nPXrKp3qMXCWgBwYFK4EEACKhZANiAATXJmOEbx5i85wj0zdH+a03B2J+VUpyqDaM\noPWVbCCqCtaw1d1hHgFQ9xKvllz3PTE90t9bHjurD6T+wgMGdqWmUqOCVirPLRps\nDP1DprLh0yeGp68O6Kllj+kIhliLvKk=\n-----END EC PRIVATE KEY-----\n", - "algo": 8 - }, - "secp521r1": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBh5Qusx4oKP7vZOHPOBE2vzZI5TS8\nPw2vWSSfXlfKg10nd61GjG09HL8+urjTwD2XHFKucnWDlmPsnL3r2kikDJkByqZq\nzgPD619cEMWJR14jPX1Yj2gACTtMTrm7xElIF\/2T27tymY2BlawR1S5pC+2Y3zuc\nQ1smx819jNn4gRSWFfw=\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN EC PRIVATE KEY-----\nMIHcAgEBBEIBV81ldPNoOGZwMdahdLlA9LewYJfMC24sMZSzzTJyO\/JUQLDTChtr\nG45FWEspDqHfBYai9LGEg1CGJAJuNbKckDmgBwYFK4EEACOhgYkDgYYABAGHlC6z\nHigo\/u9k4c84ETa\/NkjlNLw\/Da9ZJJ9eV8qDXSd3rUaMbT0cvz66uNPAPZccUq5y\ndYOWY+ycvevaSKQMmQHKpmrOA8PrX1wQxYlHXiM9fViPaAAJO0xOubvESUgX\/ZPb\nu3KZjYGVrBHVLmkL7ZjfO5xDWybHzX2M2fiBFJYV\/A==\n-----END EC PRIVATE KEY-----\n", - "algo": 9 - }, - "secp256k1": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE7HIhwVwFzSWrKMDHvEXaFbKLeb1luJ4G\n0pJFwyh3D4xhS81Q6bXkf6qax1HVwg1hf\/yEUjaypcHD4DEhrR9kiA==\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHQCAQEEINVm73\/bXz5ZCkRuJwpIvKpkm+5jXBadxCnSo4M5Yj1JoAcGBSuBBAAK\noUQDQgAE7HIhwVwFzSWrKMDHvEXaFbKLeb1luJ4G0pJFwyh3D4xhS81Q6bXkf6qa\nx1HVwg1hf\/yEUjaypcHD4DEhrR9kiA==\n-----END EC PRIVATE KEY-----\n", - "algo": 7 - } - }, - "rsa": { - "2048": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoTGqpRmnGyoBJY8JcsiI\nEE7SvSINqvfjn\/XRpWcwdowODiBIhP0xyuziC8lTikQquB+Rny+ftHjKlp1JwtC1\naW60wYSX38QPP1xJX8ERBKgtkYfo2XU8GV2bPx9+eJNXRMiPdHyyrhGln+ZIT3p9\nj20gjFIMrRz4QLqiJW+t1aPHcRysRiycenjimRAKw7q9gl7oXtYp66e52U3AYbmY\n38WikwXwoDUiuOS5DPJU78\/yMryr3qDEYNaTgLMqHRG+z7Yn8B+nBcWeSQL2k0zZ\nJ8bWknA9OmvVO1VQnJVqUa6nivnKiWpt9f\/yO1zauCLdg+9EDVocadMGlch\/474U\nxwIDAQAB\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChMaqlGacbKgEl\njwlyyIgQTtK9Ig2q9+Of9dGlZzB2jA4OIEiE\/THK7OILyVOKRCq4H5GfL5+0eMqW\nnUnC0LVpbrTBhJffxA8\/XElfwREEqC2Rh+jZdTwZXZs\/H354k1dEyI90fLKuEaWf\n5khPen2PbSCMUgytHPhAuqIlb63Vo8dxHKxGLJx6eOKZEArDur2CXuhe1inrp7nZ\nTcBhuZjfxaKTBfCgNSK45LkM8lTvz\/IyvKveoMRg1pOAsyodEb7PtifwH6cFxZ5J\nAvaTTNknxtaScD06a9U7VVCclWpRrqeK+cqJam31\/\/I7XNq4It2D70QNWhxp0waV\nyH\/jvhTHAgMBAAECggEACHv+QOFoR8g+tjTgqO+AJeeYNQdJU+HnU8CTD9MuHFdD\n2B9\/4awYBlfQkBFBOepbm0RiHFBb5hpjg2j0\/HGS0uFWV0c83TTLHqkjXYxicm3N\ntDbEnUmL58PjC4ADXqJWuhKaZmW32+ym3JM45CIM4NM8HtakvynisTmBllnZ+wAl\n7w4TJdUmNt+U3FdXNX2rrvt\/SKWqCAHCLEI2O0Wp\/HvJRZJCR8EPc8k\/oDxEFHg1\nOYDUkc9GQMQXl9KezG32GfxIv7g99r9N2j4bCnkvrADooQXMVPhIFvja5mWiE93P\nPkyO5+c4RKrBFl6Zf4oC\/DmO3v5BY58PkawXGdNMNQKBgQDX9EMwKsnIIsqOBcAK\nPJE+9nJ5OnbMeGwZFNKP+12\/AY1KftprFJZARrvAMcmIa2L2rEtRfDBK9x8SZfeM\nSorNw5poS+chEU8nh9TNjFki1hH3FWeKEVkMOZF8v5pz6EL0UKv7v8rr0hdKmFtE\nlvK7F58XmMq84obHE\/oRlaZi3QKBgQC\/Fdchy7uV49k+36nVfx5sbVWJvKmtQRSB\nCjanSpLS\/gmbjLDSBYdE8FhwMV3Wl8YsRJL3aQTSnWGJyzJ17cgGUD65EsNAh2LK\nNFNufDrVzwwjb6TRrfHK9GkcY2p4byS+Y4taT+dCny0PmdOx8xBCBUOpWmPuByJz\nn\/Zf6fLh8wKBgQCu22gfszWpKIqMDpndcAdHTPOJt04D56nXcSXBUY4pn48Q97\/R\nHl0+dEeHqoh9Pj5mb0GZHA5aVNhC5G9Zl+3mB\/CZbIQcIVDPOEuVl4OBEoZ\/Y0Rv\n5fYNUPu9X8MnALRd8IghEr2yzmzviIe19OdbmBfIWn4mDOGGhmVgIaUUvQKBgAHw\nXct4\/sFJm5W4vUduT8e34EtSf8JDS8r3aJCQACdl7oEGj3DCH5pCehNBXPtldNxU\nIc2i4iqk8C1uw2dQ71upCsnj99k6xnTYzRPs7Mfonu3pHxoFktOFYV+pXpY0QoIw\nDmTvNKCHbvSekfhXSA3zcblRMnxi1CWqNNzKSe2jAoGARPBS+EZVvC3csYVla6YU\nNcrJiTmyo2KdWwwQFQkjEjXXZkHQU6ao3zJMFyCEWJ1h+EJ3ry1gdMCm6Z0T+Z2j\n69YJnBN3AyUUb+rrpwnL++ZHakD5XUKYWPW+QMWQNOATlUlzW\/4aPIVDRoFExK5x\ncyMghvMdiG8YybtfXMxvkog=\n-----END PRIVATE KEY-----\n", - "algo": 7 - }, - "3072": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAqZkSqLk+3Do2vFSvaqeR\nr6R620V4WAqEGuZcA\/rhgu6\/YihNKgdBqOyrOyhXoPn\/2pAIa9lCqdHXxxXgMwEs\nBhmHGeFpze\/w91BM36NVVO0BFbM\/Vq4eSZyROO211RA11CNxbuPeWROmG\/bIvAVD\n78Y71ldfq4cCs0I\/SC2U74A8ubsuQ7A1EFVkGp\/PPV3oGJb2eG927rhBIFoyYVZ3\npHLBAI2txuqf8sfGAEnMO3WaFf0lT1\/YP+c4apvqg+dk9XaFbZbNSE1M\/rlqsq\/l\nOgbn+Qi0kmFOuTk1x7beUEMu4VGXsP2ehN4UjR\/P9xuj6FG1+VTNAPPww1RsQgA3\nR2P+PJMkSTaclBsGOnjw0L9TXcNpTXED8Hq0\/66Vif\/9kvUjfhFc1vdhF9dz8nbn\n5d0ygPznCAIdTnrujyAmDFF2OBceZ6DQKmGP8SOTQDLUOnrZ3CzsmsPFlh+YbC8h\nAcwHpicVKwgUgp2OAUcNSWSakpCMCLTgjmpNcWuI1HUrAgMBAAE=\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIG\/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCpmRKouT7cOja8\nVK9qp5GvpHrbRXhYCoQa5lwD+uGC7r9iKE0qB0Go7Ks7KFeg+f\/akAhr2UKp0dfH\nFeAzASwGGYcZ4WnN7\/D3UEzfo1VU7QEVsz9Wrh5JnJE47bXVEDXUI3Fu495ZE6Yb\n9si8BUPvxjvWV1+rhwKzQj9ILZTvgDy5uy5DsDUQVWQan889XegYlvZ4b3buuEEg\nWjJhVnekcsEAja3G6p\/yx8YAScw7dZoV\/SVPX9g\/5zhqm+qD52T1doVtls1ITUz+\nuWqyr+U6Buf5CLSSYU65OTXHtt5QQy7hUZew\/Z6E3hSNH8\/3G6PoUbX5VM0A8\/DD\nVGxCADdHY\/48kyRJNpyUGwY6ePDQv1Ndw2lNcQPwerT\/rpWJ\/\/2S9SN+EVzW92EX\n13Pydufl3TKA\/OcIAh1Oeu6PICYMUXY4Fx5noNAqYY\/xI5NAMtQ6etncLOyaw8WW\nH5hsLyEBzAemJxUrCBSCnY4BRw1JZJqSkIwItOCOak1xa4jUdSsCAwEAAQKCAYAE\nGV8KFPAgAogwJRvYSBSNWjxd8F\/oQNjQjaDLt9SbhYm6pZ631VUQ8CdzVpZHncNB\nVRnfAXFLCXddqHmyweR+gT9ysLAN+i6oy5gQD7KQSuorzBlLzwmMXexko9oxPCMQ\n7YpgU8GcBY2OP3i6kqYBtZjcpV\/6lVjLXF6LMA7Zew\/8rTmBCVE\/A9FXk2U+5nYl\nogBzCL6nJmzsi0GMeLqLjvp7OPFqTWFwTMPMXfxBs6X1whiUwoxHfx8t9HbGmWEd\nOyNlauPGPIMyRbLHaz6YTp9Uy468SEA5BXBl8op+h7BT8ACBORKIrG\/A0jlU7B8c\nTZniDvJ25RZiXkfR5ucgFCF\/jjOwRUJQ8hPOGRMGBi\/kOMeGYQFnAGbbqnoonbYx\naFpl\/mH+SvpYfS5KKT+YACApUvdADVumKQHaafhxJ+KQi+GVVi5t+r29dsML+1Js\n6Jrzt0kqdCTn+ldEtAXy5hQe\/bOp2cL7SYGvCdvwhbmUXDOTfb6pLe3BuEydKQEC\ngcEA0HFn5M4+A7FzYExLnJIA0SbBq9PZprg41eK6w657w6FD+lTGft4Fz24MgvUN\nH0TSYzDh4oH\/WosPfUKI4uyDEpQ5W13WDhPtEN4h6jw2Qxm048UmOgogNlxRRmtx\nyp1sFITp4yan1DteyKxqADd87mGBGnzz8b4EzcOsFx9KdwwbjfTOFRQCttNhXkr+\nVkwISmxQdqQkxoIwWUXxqqkWBWgHRxN9vxHGmzp9rxurtGDMlu\/osg0SIeIkHlcs\n5rVjAoHBANBK1Qpad9Ay5CigBbGWdKTM0Gp6GkzLRDpXi0bKQMKVLEFwdn4mvzbl\nnnZ0HDF2fWk3GfZdtW7i2uWjorIH5suO3iR9L3KUC5nM7qDnNtH5\/w6SV+YQTHQC\nSoAoVvcAf4kES\/kspghlR5EvHXJShzWW0X1EYcqIBdVL8cEVFUJ4eFUNSF45ckYd\nGI+IVmjfS+aENz5ifyTaQIf2N7fw7Ww5fkJWZRHfiyYD4GT9pbjyqCanHOxr+9mw\nagccYs3PmQKBwQCr0n\/o7VXTZ4iK\/flqJDSGNCN7x9Nnif5X2WFJAuDEv3+wsAc7\n9zrk5XtszCG3\/9xJpbbeJ3jeIzlucNUz8fCN9R9ewHg9\/JDz0Zg1ZNL59wvUoeRD\n\/arWBL1+hf00HxZDx9igxXGdEh+s3es3KIZUXo20zwGr6Y4+K6kFGmcgwRtJpl3m\npCskmBRwTPNhIaXH64dcdSxXcmP2gyCWJHGhnUI6hcenJDkKJmoKWY3tz8l2Nmcj\ntoCW67oIRKYfu68CgcBaFyPSGJMd8AUTNTOBPiwxY4z5oNpjQL+\/5EGPWsdr4g2E\nOFpn8eZeni5N2aagFjnkGjsWfi2NSn2XOZGTIyvF+4NFkQfGrRXfbe4AlkD1zQVu\njgmKrp4Cx0Ll74y9xO9kmgEqQw+FLhkoSJKZ8ewdV6BAaCVL7k1nljN4aeAKIgUZ\n9GbKqloszUTkP\/nv3jT7\/U\/PodaQX\/3tUKeE3aYzWyKrGqcYdfG\/fYm+5J6bQglM\nvpcaAxKpc05IyRRLJHECgcEAyyk404F\/4W4iV5Mg1\/k5YZQ6M0KJsHo1XxdmTKHt\n9JiuA36WeAzUJuUfVNK1YgvLh11a4gEYashnh9teHq7G638GKUYLDu8HOfGw6BFJ\npiBjSCWvScB2xIw4DP8z8Es5nKqgw3inziWWwXrbHJafPatqshEtAJHXKnPw4GhN\nV0CdHfO3rnlPxaL1bHp2v1MEbgN40jXyiTX0TjwNVePInWVm3WE3DjVvoX1qFsI3\n3jqsI9Cam0Rqzpifts6BrbAP\n-----END PRIVATE KEY-----\n", - "algo": 8 - }, - "4096": { - "public_key": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsZgBI+A4oHBTznGyTZlN\ncdHg\/O5q8MKmoTKOXP374oJ6ubzKEEOr4E1RGf+hFOUrPTj9OCnyOJ3K63Dh0hXg\nM2RNOtJzU1upFUozlqxCGaKO69DaDIXwWYSXEaaVkIvWHYtwh8iD35B15lcIG57m\nkIkYloJybZD1W4JBzDObfuoUvLKfYGxGu3CLlDJbhgPH28UAYjMMVknAoMdYJuk6\ncTTMja69HCm5fnH3oQj\/cwkcvfM6J5OhvvUZs7cdHQ1ySG4isMS5ymeMqaOeRKQz\nnkRQYjxys12b+NM+oYih0gQL4kl1Qu\/cUs+xrDlxXj2LvQDnsTg\/KXfgKYhAYYAc\nCBh\/\/LHfFpx0OBUKEIN6D7S4PJLIV3hx6vMJOAFJFF74APZRQy\/4LWYMq3Y4JCiE\nCpwOyBBoceoNUSRziHuEIgb\/1IQWtlDteB7pkUom40u3D2wH+z4+2KFV+Y3yYzFM\nB+ogNm0qt+Kze7v8tKrOgCf1QQZfFq5EgyfAYpB3xT1v+dpURiq4d3rDeDFzm+47\nH7tXrrTYzbEIaI4Ow1ukCcfAFGWobj4\/DIs\/QOFhi9x+MXT9CIR1MlsGAIUIrhpK\nYapVkpMO5z3xyzNpJ6FvkSIhnqRAPt0FG5cfOtuQdVgWvvhjuB+0ALTPFCEFe1uR\nka2V981W+HJ\/WqgcVVR7Y3cCAwEAAQ==\n-----END PUBLIC KEY-----\n", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCxmAEj4DigcFPO\ncbJNmU1x0eD87mrwwqahMo5c\/fvignq5vMoQQ6vgTVEZ\/6EU5Ss9OP04KfI4ncrr\ncOHSFeAzZE060nNTW6kVSjOWrEIZoo7r0NoMhfBZhJcRppWQi9Ydi3CHyIPfkHXm\nVwgbnuaQiRiWgnJtkPVbgkHMM5t+6hS8sp9gbEa7cIuUMluGA8fbxQBiMwxWScCg\nx1gm6TpxNMyNrr0cKbl+cfehCP9zCRy98zonk6G+9Rmztx0dDXJIbiKwxLnKZ4yp\no55EpDOeRFBiPHKzXZv40z6hiKHSBAviSXVC79xSz7GsOXFePYu9AOexOD8pd+Ap\niEBhgBwIGH\/8sd8WnHQ4FQoQg3oPtLg8kshXeHHq8wk4AUkUXvgA9lFDL\/gtZgyr\ndjgkKIQKnA7IEGhx6g1RJHOIe4QiBv\/UhBa2UO14HumRSibjS7cPbAf7Pj7YoVX5\njfJjMUwH6iA2bSq34rN7u\/y0qs6AJ\/VBBl8WrkSDJ8BikHfFPW\/52lRGKrh3esN4\nMXOb7jsfu1eutNjNsQhojg7DW6QJx8AUZahuPj8Miz9A4WGL3H4xdP0IhHUyWwYA\nhQiuGkphqlWSkw7nPfHLM2knoW+RIiGepEA+3QUblx8625B1WBa++GO4H7QAtM8U\nIQV7W5GRrZX3zVb4cn9aqBxVVHtjdwIDAQABAoICACCpsc\/83b1YW3mVPLN79hvw\ne35ZhU6ppkbwivF8fxa+Y78Eg29xWsvCvJ9Y\/jHfIlA8yonJYTTbhKY\/2TCv+E\/L\na07dxPs4WQVC4\/Ea1n9rf\/jMLUZvXfDA654B8vEmXueJLVWz4dk88wo9yI5377T2\nmhCYhl4zcoT1lI9vkHJLsCuyeJCd6XZw8SL9Dgs8Z8Y6WeM1u1elcenAMCzb6XVH\nvjVyxXJIFEc2w9IY2w63xtMCyJfd1bpOzv7YN2EQB4xdwUCctgUNfXf30VSTlLDP\npK8kqf3mQhkGFTdVb1m2h88DLq90eSO78lQYLoskK67D21kjXK6OTyqkVh74lm7x\n8toWEmIs6EQ5L3VAcAaeoanULojid9rb2YnOSNq8NwBKVfNqK\/rrrwyhnBwW8Co3\nyNi5Q1EdsXUoRVowd0L8+NvBhc\/D9PZqm+kiMF2q3zBcLFol\/amO2ABMsBPxbcqD\niL7FlyLLJLd5lwXxyEz1Xq6olhmHiqNn7SSCSEDVYB1MofxXg5dmE7IbjP3G4Kxj\nF+4INrcjj89vUsy9wadhTV1sBU\/n76HU5i88JS34nIdJQIsb7Pm4vqee9EuljdI5\n73sXX5a6WvZGE+Hu4KqWbk2nonJF9dpxn9VR4mVQmxSHtWjkzNXtCzOl\/QFyp+GM\nto9IFsIis3qQB\/OJ54mxAoIBAQDqwVgiqxfgcv0I7Pfb+VXCvezteZpuAVTsxWSZ\nbzgkVu7ZXwFwra\/VaaNRhWM7u8DSvEc87wLOO2PRB9vPSFJKRX53qbUWrlBD0s2a\nOiSnBnRUCW9UB08YgBMiCzviqPOwyfQ5QYSOJBeU02YRT1IEgX\/YbOzzp7MPFtkk\nyuG1NQGTreqQs1z7M\/xTLG4krIEzY5xa75I+NSmNBud0hgqe\/5gDEewsX+uGF3dm\nkL3P5uglbpLW\/uFuqRuY5h9oRhRADQh7WoSkn4gegOKyVQEzhra5zCMLViRriW\/v\nVUyBC8dnDRuOJ7vrwqHMyb2n6Iwbg2+H9GiMKCpeYbaYM0SnAoIBAQDBqmFiF8Y2\nUcPLGSsiV1zlN8w+2vGmGnTVscDz+u2s0wjYismWRVEhWNPyLVFN4UsdalJ7JFgN\nzQubePXKai\/hLTjDUink0e2TUQx4TQBUU21OXxHA6WukGBZXrP0d0KXRjzbShemN\nTIeKaNox2NWEQUJWKpzkeyEm+d+Tpsp1CtbfeiD+XQMZr\/QuEcyXaenLj1WJX8oa\nRZAs33YzSrN\/WOZ2xTEyympmJC8p0upoPxAu+CrYCIJZ\/9cHruvkzJD1j95seZAE\n2TsbEC0sTQE3h8HpHQWFPi4CR9vQQVXza35qlvZnT1yxJwXOX6AEce9aXHFiHANg\nCRwZt\/7gETSxAoIBAETHSsw1dnRjHDF+RAwl2\/OHc6AL7avnJfuMxbGSfU9gTPBQ\nvnpF2Otc3OWof+9jTdYwJWr718WWbuMyOztaxAlQnQHwLccsYQXOAED8YfqxkGmC\nriRfU9QoyfJCelQpDeSw9qXDxVNjzajj2tadd7ksO8mr+CxW6MY1+n6mFkTh98lN\nvhiRBF\/w1i+EJ+0EwYHN4GRgJmelabwQ1sUz9G6rEd1sZdaGb9nEjE33gDUmQMOe\nxtTIrkGeuCAu4+rIBWzSpLaHSa91sgrF1iVLdGOlR2neHjJXFaqQBMSJKDXyvoQ5\nueYHTC6BwqfeP3uvTUVOV+HsQKk3p1oppLao5qcCggEAKJHpvqPeWQi97HEEUThd\n9ILA3bX+A17tdMq88h9x5M98vegtHLa+rS6vj78gliEJHEtmpfdSHuoCcXpgexvN\nle1kQ76VmiLEEyVaaGUxGXk0n8NYs8HyU7jcDVfm2nUYF5NZ17ZH29rZVgxrESAs\ncn09SVG59j85DbIwvPym0ugHZV9vQ\/n2KU5r567A3kNIv+Tx9UpEy0YhUtUpLMuM\nWLQl62GZ0dsHeQhBfRB7HIWBfWVtjD4UGIh44lopfo\/AGkEeRjkdC3b6Y8v6upoT\nFC\/zVkNHIceJ2d511OWq\/Mha\/jdLvQ6qC05yb+4mVmgLzTEqa3QU3Oxrn5Ok6AmS\nsQKCAQEAhQ+lmWkp0qmLEJpYeX8Ct14NGPEEeUs8v\/0AIzkYvMFMoRsXqnVwmAko\nyVu+szQiV\/4SIet6UF53TyGaBJ15EfZAorOfWdMTlvO5Iz7hpTe\/9z5W7tuk4iGR\npcxUYKc3tJg9Yp5M6y2lWzLVUHtc\/2LiP1OUAxeDDmhhYSR7MIiuIg5yKAYbW04B\navIh+uDEjO2iv5jWrtBBpCAPSzBOX5qRFSbs419dnpmpatPY4hPMSNyOQCfBEScL\nr6fcsDq19iUgP2tu9GGIotwbw0kpaTtwvl+i\/kxeNmPAx7zK2evuXfp1Gue4jsoa\nB+4qZpx1tNgmByE6xwy1BX7GmcYu8Q==\n-----END PRIVATE KEY-----\n", - "algo": 9 - } - } -} diff --git a/tests/fixtures/lemmy-ml-u-pfefferle.json b/tests/fixtures/lemmy-ml-u-pfefferle.json deleted file mode 100644 index 92992a883..000000000 --- a/tests/fixtures/lemmy-ml-u-pfefferle.json +++ /dev/null @@ -1 +0,0 @@ -{"headers":{"server":"nginx","date":"Fri, 03 May 2024 06:39:09 GMT","content-type":"application\/activity+json","vary":"accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers","content-encoding":"br","access-control-expose-headers":"content-type, content-encoding, vary","cache-control":"public, max-age=60","referrer-policy":"same-origin","x-content-type-options":"nosniff","x-frame-options":"DENY","x-xss-protection":"1; mode=block"},"body":"{\n \"@context\": [\n \"https:\/\/join-lemmy.org\/context.json\",\n \"https:\/\/www.w3.org\/ns\/activitystreams\"\n ],\n \"type\": \"Person\",\n \"id\": \"https:\/\/lemmy.ml\/u\/pfefferle\",\n \"preferredUsername\": \"pfefferle\",\n \"inbox\": \"https:\/\/lemmy.ml\/u\/pfefferle\/inbox\",\n \"outbox\": \"https:\/\/lemmy.ml\/u\/pfefferle\/outbox\",\n \"publicKey\": {\n \"id\": \"https:\/\/lemmy.ml\/u\/pfefferle#main-key\",\n \"owner\": \"https:\/\/lemmy.ml\/u\/pfefferle\",\n \"publicKeyPem\": \"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4hFg+F0bW4w1n+uAVOWI\\nX45CpXJ1T13xEXehtcqa3ieiN099TnJRfHySNLhZ6Yn4tn5oo+4nUvpX+lM1OpYC\\nRl1fbB9M4dSyBjMBSVFTffZ6QQ9dpB84pgifHY9EqTCiA38lf+dNIskv0tzqQQ8o\\nvTejDH73jUcjTe9CJuW2H1EdtbqL1Et7kNpU+nQQkx7m+LKNIG80UTkrgREZNz+o\\n1SJ3FkxstmQZQ8l+fMPfmFcUOFYpaBwwl1MaR1bLLjBRHOSBCDA1eNvncGfiODwX\\n0RhnUh\/QFXRgMIzuHK0XWWWVvje3yVEnA0Vllc7THAL7x9M\/ptz2j5dec98UlKiC\\niwIDAQAB\\n-----END PUBLIC KEY-----\\n\"\n },\n \"endpoints\": {\n \"sharedInbox\": \"https:\/\/lemmy.ml\/inbox\"\n },\n \"published\": \"2020-01-07T08:09:09.600169Z\"\n}","response":{"code":200}} \ No newline at end of file diff --git a/tests/fixtures/lemmy-ml-well-known-webfinger.json b/tests/fixtures/lemmy-ml-well-known-webfinger.json deleted file mode 100644 index 4e303416d..000000000 --- a/tests/fixtures/lemmy-ml-well-known-webfinger.json +++ /dev/null @@ -1 +0,0 @@ -{"headers":{"server":"nginx","date":"Fri, 03 May 2024 06:39:09 GMT","content-type":"application\/json","access-control-expose-headers":"content-type, cache-control, vary, content-encoding","content-encoding":"br","vary":"accept-encoding, Origin, Access-Control-Request-Method, Access-Control-Request-Headers","cache-control":"public, max-age=259200","referrer-policy":"same-origin","x-content-type-options":"nosniff","x-frame-options":"DENY","x-xss-protection":"1; mode=block"},"body":"{\"subject\":\"acct:pfefferle@lemmy.ml\",\"links\":[{\"rel\":\"http:\/\/webfinger.net\/rel\/profile-page\",\"type\":\"text\/html\",\"href\":\"https:\/\/lemmy.ml\/u\/pfefferle\",\"template\":null},{\"rel\":\"self\",\"type\":\"application\/activity+json\",\"href\":\"https:\/\/lemmy.ml\/u\/pfefferle\",\"template\":null,\"properties\":{\"https:\/\/www.w3.org\/ns\/activitystreams#type\":\"Person\"}},{\"rel\":\"http:\/\/ostatus.org\/schema\/1.0\/subscribe\",\"type\":null,\"href\":null,\"template\":\"https:\/\/lemmy.ml\/activitypub\/externalInteraction?uri={uri}\"}]}","response":{"code":200}} \ No newline at end of file diff --git a/tests/fixtures/notiz-blog-author-matthias-pfefferle.json b/tests/fixtures/notiz-blog-author-matthias-pfefferle.json deleted file mode 100644 index d93d7fa5a..000000000 --- a/tests/fixtures/notiz-blog-author-matthias-pfefferle.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "headers": { - "date": "Fri, 09 Dec 2022 10:39:51 GMT", - "content-type": "application\/activity+json", - "server": "nginx", - "x-xrds-location": "https:\/\/notiz.blog\/?xrds", - "x-yadis-location": "https:\/\/notiz.blog\/?xrds", - "link": "<https:\/\/notiz.blog\/wp-api\/micropub\/1.0\/media>; rel=\"micropub_media\", <https:\/\/notiz.blog\/wp-api\/micropub\/1.0\/endpoint>; rel=\"micropub\", <https:\/\/notiz.blog\/wp-api\/friends\/v1>; rel=\"friends-base-url\", <https:\/\/notiz.blog\/wp-api\/indieauth\/1.0\/auth>; rel=\"authorization_endpoint\", <https:\/\/notiz.blog\/wp-api\/indieauth\/1.0\/token>; rel=\"token_endpoint\", <https:\/\/notiz.blog\/wp-api\/indieauth\/1.0\/metadata>; rel=\"indieauth-metadata\", <https:\/\/notiz.blog\/wp-api\/>; rel=\"https:\/\/api.w.org\/\", <https:\/\/notiz.blog\/wp-api\/wp\/v2\/users\/1>; rel=\"alternate\"; type=\"application\/json\"", - "cache-control": "max-age=0, public", - "expires": "Fri, 09 Dec 2022 10:39:51 GMT", - "x-xss-protection": "1; mode=block", - "x-content-type-options": "nosniff", - "strict-transport-security": "max-age=31536000", - "x-frame-options": "SAMEORIGIN", - "referrer-policy": "strict-origin-when-cross-origin", - "x-clacks-overhead": "GNU Terry Pratchett" - }, - "body": "{\"@context\":[\"https:\\\/\\\/www.w3.org\\\/ns\\\/activitystreams\",\"https:\\\/\\\/w3id.org\\\/security\\\/v1\",{\"manuallyApprovesFollowers\":\"as:manuallyApprovesFollowers\",\"PropertyValue\":\"schema:PropertyValue\",\"schema\":\"http:\\\/\\\/schema.org#\",\"pt\":\"https:\\\/\\\/joinpeertube.org\\\/ns#\",\"toot\":\"http:\\\/\\\/joinmastodon.org\\\/ns#\",\"value\":\"schema:value\",\"Hashtag\":\"as:Hashtag\",\"featured\":{\"@id\":\"toot:featured\",\"@type\":\"@id\"},\"featuredTags\":{\"@id\":\"toot:featuredTags\",\"@type\":\"@id\"}}],\"id\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\",\"type\":\"Person\",\"name\":\"Matthias Pfefferle\",\"summary\":\"Ich bin Webworker und arbeite als \\u0022Head of WordPress Development\\u0022 f\\u00fcr IONOS in Karlsruhe. Ich blogge, podcaste und schreibe \\u003Cdel\\u003Eeine Kolumne\\u003C\\\/del\\u003E \\u00fcber das open, independent und federated social Web. \\u003Ca href=\\u0022https:\\\/\\\/notiz.blog\\\/about\\\/\\u0022\\u003EMehr \\u00fcber mich.\\u003C\\\/a\\u003E\",\"preferredUsername\":\"pfefferle\",\"url\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\",\"icon\":{\"type\":\"Image\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75512bb584bbceae57dfc503692b16b2?s=120\\u0026d=mm\\u0026r=g\"},\"image\":{\"type\":\"Image\",\"url\":\"https:\\\/\\\/notiz.blog\\\/wp-content\\\/uploads\\\/2017\\\/02\\\/cropped-Unknown-2.jpeg\"},\"inbox\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/activitypub\\\/1.0\\\/users\\\/1\\\/inbox\",\"outbox\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/activitypub\\\/1.0\\\/users\\\/1\\\/outbox\",\"followers\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/activitypub\\\/1.0\\\/users\\\/1\\\/followers\",\"following\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/activitypub\\\/1.0\\\/users\\\/1\\\/following\",\"manuallyApprovesFollowers\":false,\"publicKey\":{\"id\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/#main-key\",\"owner\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\",\"publicKeyPem\":\"-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA039CnlArzn6nsRjcC2RJ\\nrjY3K5ZrLnFUbPtHLGNXMJUGW+rFYE1DzhdKPTj9giiXE+J7ADI0Tme5rSWw14bT\\nLhOMBs2ma8d03\\\/wnF1+kxDBeRyvyoki2TjtiJdoPu1jwZLLYTuzWTXdDiqrwSKOL\\nncKFGIkjyzOLoYuIKPgIuFg3Mt8rI6teQ2Q65YsGvOG\\\/mjBOUwl5FjgcGt9aQARd\\nmFxW5XydxfNrCZwuE34Zbq\\\/IC7rvaUx98zvrEHrD237YQ8O4M3afC9Kbu5Xp7k8Q\\n5JG80RItV7n8xjyt0i9LaVwlZDDYmLDYv50VhjcwRvtVFVfaN7yxDnHttd1NNENK\\nCwIDAQAB\\n-----END PUBLIC KEY-----\"},\"tag\":[],\"attachment\":[{\"type\":\"PropertyValue\",\"name\":\"Blog\",\"value\":\"\\u003Ca rel=\\u0022me\\u0022 title=\\u0022https:\\\/\\\/notiz.blog\\\/\\u0022 target=\\u0022_blank\\u0022 href=\\u0022https:\\\/\\\/notiz.blog\\\/\\u0022\\u003Enotiz.blog\\u003C\\\/a\\u003E\"},{\"type\":\"PropertyValue\",\"name\":\"Profil\",\"value\":\"\\u003Ca rel=\\u0022me\\u0022 title=\\u0022https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\\u0022 target=\\u0022_blank\\u0022 href=\\u0022https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\\u0022\\u003Enotiz.blog\\u003C\\\/a\\u003E\"},{\"type\":\"PropertyValue\",\"name\":\"Website\",\"value\":\"\\u003Ca rel=\\u0022me\\u0022 title=\\u0022https:\\\/\\\/pfefferle.org\\\/\\u0022 target=\\u0022_blank\\u0022 href=\\u0022https:\\\/\\\/pfefferle.org\\\/\\u0022\\u003Epfefferle.org\\u003C\\\/a\\u003E\"}]}", - "response": { - "code": 200 - } -} diff --git a/tests/fixtures/notiz-blog-well-known-webfinger.json b/tests/fixtures/notiz-blog-well-known-webfinger.json deleted file mode 100644 index 3578ef13a..000000000 --- a/tests/fixtures/notiz-blog-well-known-webfinger.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "headers": { - "date": "Fri, 09 Dec 2022 10:39:51 GMT", - "content-type": "application\/jrd+json; charset=UTF-8", - "server": "nginx", - "x-xrds-location": "https:\/\/notiz.blog\/?xrds", - "x-yadis-location": "https:\/\/notiz.blog\/?xrds", - "access-control-allow-origin": "*", - "cache-control": "max-age=2592000, public", - "expires": "Sun, 08 Jan 2023 10:39:50 GMT", - "x-xss-protection": "1; mode=block", - "x-content-type-options": "nosniff", - "strict-transport-security": "max-age=31536000", - "x-frame-options": "SAMEORIGIN", - "referrer-policy": "strict-origin-when-cross-origin", - "x-clacks-overhead": "GNU Terry Pratchett" - }, - "body": "{\"subject\":\"acct:pfefferle@notiz.blog\",\"aliases\":[\"acct:pfefferle@notiz.blog\",\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\",\"mailto:pfefferle@notiz.blog\"],\"links\":[{\"rel\":\"http:\\\/\\\/webfinger.net\\\/rel\\\/profile-page\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\",\"type\":\"text\\\/html\"},{\"rel\":\"http:\\\/\\\/webfinger.net\\\/rel\\\/avatar\",\"href\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75512bb584bbceae57dfc503692b16b2?s=96&d=mm&r=g\"},{\"rel\":\"http:\\\/\\\/webfinger.net\\\/rel\\\/profile-page\",\"href\":\"https:\\\/\\\/pfefferle.org\\\/\",\"type\":\"text\\\/html\"},{\"rel\":\"payment\",\"href\":\"https:\\\/\\\/www.paypal.me\\\/matthiaspfefferle\"},{\"rel\":\"payment\",\"href\":\"https:\\\/\\\/liberapay.com\\\/pfefferle\\\/\"},{\"rel\":\"payment\",\"href\":\"https:\\\/\\\/notiz.blog\\\/donate\\\/\"},{\"rel\":\"payment\",\"href\":\"https:\\\/\\\/flattr.com\\\/@pfefferle\"},{\"href\":\"https:\\\/\\\/notiz.blog\\\/\",\"rel\":\"http:\\\/\\\/specs.openid.net\\\/auth\\\/2.0\\\/provider\"},{\"rel\":\"self\",\"type\":\"application\\\/activity+json\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/\"},{\"rel\":\"micropub_media\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/micropub\\\/1.0\\\/media\"},{\"rel\":\"micropub\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/micropub\\\/1.0\\\/endpoint\"},{\"rel\":\"http:\\\/\\\/nodeinfo.diaspora.software\\\/ns\\\/schema\\\/2.0\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/nodeinfo\\\/2.0\"},{\"rel\":\"http:\\\/\\\/nodeinfo.diaspora.software\\\/ns\\\/schema\\\/1.1\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/nodeinfo\\\/1.1\"},{\"rel\":\"http:\\\/\\\/nodeinfo.diaspora.software\\\/ns\\\/schema\\\/1.0\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/nodeinfo\\\/1.0\"},{\"rel\":\"https:\\\/\\\/feneas.org\\\/ns\\\/serviceinfo\",\"type\":\"application\\\/ld+json\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/serviceinfo\\\/1.0\",\"properties\":{\"https:\\\/\\\/feneas.org\\\/ns\\\/serviceinfo#software.name\":\"notizBlog\"}},{\"rel\":\"http:\\\/\\\/schemas.google.com\\\/g\\\/2010#updates-from\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/feed\\\/ostatus\\\/\",\"type\":\"application\\\/atom+xml\"},{\"rel\":\"http:\\\/\\\/ostatus.org\\\/schema\\\/1.0\\\/subscribe\",\"template\":\"https:\\\/\\\/notiz.blog\\\/?profile={uri}\"},{\"rel\":\"magic-public-key\",\"href\":\"data:application\\\/magic-public-key,RSA.039CnlArzn6nsRjcC2RJrjY3K5ZrLnFUbPtHLGNXMJUGW-rFYE1DzhdKPTj9giiXE-J7ADI0Tme5rSWw14bTLhOMBs2ma8d03_wnF1-kxDBeRyvyoki2TjtiJdoPu1jwZLLYTuzWTXdDiqrwSKOLncKFGIkjyzOLoYuIKPgIuFg3Mt8rI6teQ2Q65YsGvOG_mjBOUwl5FjgcGt9aQARdmFxW5XydxfNrCZwuE34Zbq_IC7rvaUx98zvrEHrD237YQ8O4M3afC9Kbu5Xp7k8Q5JG80RItV7n8xjyt0i9LaVwlZDDYmLDYv50VhjcwRvtVFVfaN7yxDnHttd1NNENKCw==.AQAB\"},{\"rel\":\"salmon\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/?salmon=endpoint\"},{\"rel\":\"http:\\\/\\\/salmon-protocol.org\\\/ns\\\/salmon-replies\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/?salmon=endpoint\"},{\"rel\":\"http:\\\/\\\/salmon-protocol.org\\\/ns\\\/salmon-mention\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/?salmon=endpoint\"},{\"rel\":\"feed\",\"type\":\"application\\\/stream+json\",\"title\":\"Activity-Streams 1.0 Feed\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/feed\\\/as1\\\/\"},{\"rel\":\"feed\",\"type\":\"application\\\/activity+json\",\"title\":\"Activity-Streams 2.0 Feed\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/feed\\\/as2\\\/\"},{\"rel\":\"http:\\\/\\\/oexchange.org\\\/spec\\\/0.8\\\/rel\\\/user-target\",\"href\":\"https:\\\/\\\/notiz.blog\\\/?oexchange=xrd\",\"type\":\"application\\\/xrd+xml\"},{\"rel\":\"http:\\\/\\\/a9.com\\\/-\\\/spec\\\/opensearch\\\/1.1\\\/\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/opensearch\\\/1.1\\\/document\",\"type\":\"application\\\/opensearchdescription+xml\"},{\"rel\":\"describedby\",\"href\":\"https:\\\/\\\/notiz.blog\\\/author\\\/matthias-pfefferle\\\/feed\\\/foaf\\\/\",\"type\":\"application\\\/rdf+xml\"},{\"rel\":\"webmention\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/webmention\\\/1.0\\\/endpoint\"},{\"rel\":\"http:\\\/\\\/webmention.org\\\/\",\"href\":\"https:\\\/\\\/notiz.blog\\\/wp-api\\\/webmention\\\/1.0\\\/endpoint\"}],\"properties\":{\"http:\\\/\\\/salmon-protocol.org\\\/ns\\\/magic-key\":\"RSA.039CnlArzn6nsRjcC2RJrjY3K5ZrLnFUbPtHLGNXMJUGW-rFYE1DzhdKPTj9giiXE-J7ADI0Tme5rSWw14bTLhOMBs2ma8d03_wnF1-kxDBeRyvyoki2TjtiJdoPu1jwZLLYTuzWTXdDiqrwSKOLncKFGIkjyzOLoYuIKPgIuFg3Mt8rI6teQ2Q65YsGvOG_mjBOUwl5FjgcGt9aQARdmFxW5XydxfNrCZwuE34Zbq_IC7rvaUx98zvrEHrD237YQ8O4M3afC9Kbu5Xp7k8Q5JG80RItV7n8xjyt0i9LaVwlZDDYmLDYv50VhjcwRvtVFVfaN7yxDnHttd1NNENKCw==.AQAB\"}}", - "response": { - "code": 200 - } -} From f79de51cc774bbb7f788a89452699427819a3db6 Mon Sep 17 00:00:00 2001 From: Jiwoon-Kim <71701140+Jiwoon-Kim@users.noreply.github.com> Date: Mon, 6 Oct 2025 22:11:18 +0900 Subject: [PATCH 50/52] =?UTF-8?q?Fix:=20issue=20#2286=20=E2=80=93=20typo,?= =?UTF-8?q?=20improved=20quoting=20explanation,=20add=20missing=20i18n=20i?= =?UTF-8?q?n=20advanced=20settings=20(#2290)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/changelog/2290-from-description | 4 ++++ build/editor-plugin/plugin.asset.php | 2 +- build/editor-plugin/plugin.js | 2 +- readme.txt | 2 +- src/editor-plugin/plugin.js | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .github/changelog/2290-from-description diff --git a/.github/changelog/2290-from-description b/.github/changelog/2290-from-description new file mode 100644 index 000000000..5e4d2fac3 --- /dev/null +++ b/.github/changelog/2290-from-description @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Fixed typo in example, improve quoting description. diff --git a/build/editor-plugin/plugin.asset.php b/build/editor-plugin/plugin.asset.php index fe4d6a1f6..392557751 100644 --- a/build/editor-plugin/plugin.asset.php +++ b/build/editor-plugin/plugin.asset.php @@ -1 +1 @@ -<?php return array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '3331b1701416b9746825'); +<?php return array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '12df5cf70e99e55c6091'); diff --git a/build/editor-plugin/plugin.js b/build/editor-plugin/plugin.js index 5bd5b7d33..bf2084bb2 100644 --- a/build/editor-plugin/plugin.js +++ b/build/editor-plugin/plugin.js @@ -1 +1 @@ -(()=>{"use strict";const t=window.wp.editor,e=window.wp.editPost,i=window.wp.plugins,n=window.wp.components,a=window.wp.element,o=(0,a.forwardRef)(({icon:t,size:e=24,...i},n)=>(0,a.cloneElement)(t,{width:e,height:e,...i,ref:n})),l=window.wp.primitives,c=window.ReactJSXRuntime,s=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),u=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),r=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),p=window.wp.data,v=window.wp.coreData,w=window.wp.url,_=window.wp.i18n;(0,i.registerPlugin)("activitypub-editor-plugin",{render:()=>{const i=(0,p.useSelect)(e=>e(t.store).getCurrentPostType(),[]),[a,r]=(0,v.useEntityProp)("postType",i,"meta");if("wp_block"===i)return null;const w=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5A6.5 6.5 0 0 1 6.93 7.931l9.139 9.138A6.473 6.473 0 0 1 12 18.5Zm5.123-2.498a6.5 6.5 0 0 0-9.124-9.124l9.124 9.124ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Z"})}),h={verticalAlign:"middle",gap:"4px",justifyContent:"start",display:"inline-flex",alignItems:"center"},b=(t,e,i)=>(0,c.jsx)(n.Tooltip,{text:i,children:(0,c.jsxs)(n.__experimentalText,{style:h,children:[(0,c.jsx)(o,{icon:t}),e]})}),d=t.PluginDocumentSettingPanel||e.PluginDocumentSettingPanel;return(0,c.jsxs)(d,{name:"activitypub",className:"block-editor-block-inspector",title:(0,_.__)("Fediverse ⁂","activitypub"),children:[(0,c.jsx)(n.TextControl,{label:(0,_.__)("Content Warning","activitypub"),value:a?.activitypub_content_warning,onChange:t=>{r({...a,activitypub_content_warning:t})},placeholder:(0,_.__)("Optional content warning","activitypub"),help:(0,_.__)("Content warnings do not change the content on your site, only in the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RangeControl,{label:(0,_.__)("Maximum Image Attachments","activitypub"),value:a?.activitypub_max_image_attachments,onChange:t=>{r({...a,activitypub_max_image_attachments:t})},min:0,max:10,help:(0,_.__)("Maximum number of image attachments to include when sharing to the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RadioControl,{label:(0,_.__)("Visibility","activitypub"),help:(0,_.__)("This adjusts the visibility of a post in the fediverse, but note that it won't affect how the post appears on the blog.","activitypub"),selected:a?.activitypub_content_visibility||"public",options:[{label:b(s,(0,_.__)("Public","activitypub"),(0,_.__)("Post will be visible to everyone and appear in public timelines.","activitypub")),value:"public"},{label:b(u,(0,_.__)("Quiet public","activitypub"),(0,_.__)("Post will be visible to everyone but will not appear in public timelines.","activitypub")),value:"quiet_public"},{label:b(w,(0,_.__)("Do not federate","activitypub"),(0,_.__)("Post will not be shared to the Fediverse.","activitypub")),value:"local"}],onChange:t=>{r({...a,activitypub_content_visibility:t})},className:"activitypub-visibility"}),(0,c.jsx)(n.SelectControl,{label:(0,_.__)("Who can quote this post?","activitypub"),help:(0,_.__)("Quoting allows others to reshare your post while adding their own commentary.","activitypub"),value:a?.activitypub_interaction_policy_quote,options:[{label:(0,_.__)("Anyone","activitypub"),value:"anyone"},{label:(0,_.__)("Followers only","activitypub"),value:"followers"},{label:(0,_.__)("Just me","activitypub"),value:"me"}],onChange:t=>{r({...a,activitypub_interaction_policy_quote:t})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})}}),(0,i.registerPlugin)("activitypub-editor-preview",{render:()=>{const e=(0,p.useSelect)(e=>e(t.store).getCurrentPost().status,[]);return(0,c.jsx)(c.Fragment,{children:t.PluginPreviewMenuItem?(0,c.jsx)(t.PluginPreviewMenuItem,{onClick:()=>{const e=(0,p.select)(t.store).getEditedPostPreviewLink(),i=(0,w.addQueryArgs)(e,{activitypub:"true"});window.open(i,"_blank")},icon:r,disabled:"auto-draft"===e,children:(0,_.__)("Fediverse preview ⁂","activitypub")}):null})}})})(); \ No newline at end of file +(()=>{"use strict";const t=window.wp.editor,e=window.wp.editPost,i=window.wp.plugins,n=window.wp.components,a=window.wp.element,o=(0,a.forwardRef)(({icon:t,size:e=24,...i},n)=>(0,a.cloneElement)(t,{width:e,height:e,...i,ref:n})),l=window.wp.primitives,c=window.ReactJSXRuntime,s=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),u=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M15.5 9.5a1 1 0 100-2 1 1 0 000 2zm0 1.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm-2.25 6v-2a2.75 2.75 0 00-2.75-2.75h-4A2.75 2.75 0 003.75 15v2h1.5v-2c0-.69.56-1.25 1.25-1.25h4c.69 0 1.25.56 1.25 1.25v2h1.5zm7-2v2h-1.5v-2c0-.69-.56-1.25-1.25-1.25H15v-1.5h2.5A2.75 2.75 0 0120.25 15zM9.5 8.5a1 1 0 11-2 0 1 1 0 012 0zm1.5 0a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z",fillRule:"evenodd"})}),r=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),p=window.wp.data,v=window.wp.coreData,w=window.wp.url,_=window.wp.i18n;(0,i.registerPlugin)("activitypub-editor-plugin",{render:()=>{const i=(0,p.useSelect)(e=>e(t.store).getCurrentPostType(),[]),[a,r]=(0,v.useEntityProp)("postType",i,"meta");if("wp_block"===i)return null;const w=(0,c.jsx)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,c.jsx)(l.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5A6.5 6.5 0 0 1 6.93 7.931l9.139 9.138A6.473 6.473 0 0 1 12 18.5Zm5.123-2.498a6.5 6.5 0 0 0-9.124-9.124l9.124 9.124ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Z"})}),h={verticalAlign:"middle",gap:"4px",justifyContent:"start",display:"inline-flex",alignItems:"center"},b=(t,e,i)=>(0,c.jsx)(n.Tooltip,{text:i,children:(0,c.jsxs)(n.__experimentalText,{style:h,children:[(0,c.jsx)(o,{icon:t}),e]})}),d=t.PluginDocumentSettingPanel||e.PluginDocumentSettingPanel;return(0,c.jsxs)(d,{name:"activitypub",className:"block-editor-block-inspector",title:(0,_.__)("Fediverse ⁂","activitypub"),children:[(0,c.jsx)(n.TextControl,{label:(0,_.__)("Content Warning","activitypub"),value:a?.activitypub_content_warning,onChange:t=>{r({...a,activitypub_content_warning:t})},placeholder:(0,_.__)("Optional content warning","activitypub"),help:(0,_.__)("Content warnings do not change the content on your site, only in the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RangeControl,{label:(0,_.__)("Maximum Image Attachments","activitypub"),value:a?.activitypub_max_image_attachments,onChange:t=>{r({...a,activitypub_max_image_attachments:t})},min:0,max:10,help:(0,_.__)("Maximum number of image attachments to include when sharing to the fediverse.","activitypub"),__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),(0,c.jsx)(n.RadioControl,{label:(0,_.__)("Visibility","activitypub"),help:(0,_.__)("This adjusts the visibility of a post in the fediverse, but note that it won't affect how the post appears on the blog.","activitypub"),selected:a?.activitypub_content_visibility||"public",options:[{label:b(s,(0,_.__)("Public","activitypub"),(0,_.__)("Post will be visible to everyone and appear in public timelines.","activitypub")),value:"public"},{label:b(u,(0,_.__)("Quiet public","activitypub"),(0,_.__)("Post will be visible to everyone but will not appear in public timelines.","activitypub")),value:"quiet_public"},{label:b(w,(0,_.__)("Do not federate","activitypub"),(0,_.__)("Post will not be shared to the Fediverse.","activitypub")),value:"local"}],onChange:t=>{r({...a,activitypub_content_visibility:t})},className:"activitypub-visibility"}),(0,c.jsx)(n.SelectControl,{label:(0,_.__)("Who can quote this post?","activitypub"),help:(0,_.__)("Quoting allows others to cite your post while adding their own commentary.","activitypub"),value:a?.activitypub_interaction_policy_quote,options:[{label:(0,_.__)("Anyone","activitypub"),value:"anyone"},{label:(0,_.__)("Followers only","activitypub"),value:"followers"},{label:(0,_.__)("Just me","activitypub"),value:"me"}],onChange:t=>{r({...a,activitypub_interaction_policy_quote:t})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})]})}}),(0,i.registerPlugin)("activitypub-editor-preview",{render:()=>{const e=(0,p.useSelect)(e=>e(t.store).getCurrentPost().status,[]);return(0,c.jsx)(c.Fragment,{children:t.PluginPreviewMenuItem?(0,c.jsx)(t.PluginPreviewMenuItem,{onClick:()=>{const e=(0,p.select)(t.store).getEditedPostPreviewLink(),i=(0,w.addQueryArgs)(e,{activitypub:"true"});window.open(i,"_blank")},icon:r,disabled:"auto-draft"===e,children:(0,_.__)("Fediverse preview ⁂","activitypub")}):null})}})})(); \ No newline at end of file diff --git a/readme.txt b/readme.txt index 2abdef656..7cb7ab959 100644 --- a/readme.txt +++ b/readme.txt @@ -16,7 +16,7 @@ Enter the fediverse with **ActivityPub**, broadcasting your blog to a wider audi https://www.youtube.com/watch?v=QzYozbNneVc -With the ActivityPub plugin installed, your WordPress blog itself functions as a federated profile, along with profiles for each author. For instance, if your website is `example.com`, then the blog-wide profile can be found at `@example.com@example.com`, and authors like Jane and Bob would have their individual profiles at `@jane@example.com` and `@bobz@example.com`, respectively. +With the ActivityPub plugin installed, your WordPress blog itself functions as a federated profile, along with profiles for each author. For instance, if your website is `example.com`, then the blog-wide profile can be found at `@example.com@example.com`, and authors like Jane and Bob would have their individual profiles at `@jane@example.com` and `@bob@example.com`, respectively. An example: I give you my Mastodon profile name: `@pfefferle@mastodon.social`. You search, see my profile, and hit follow. Now, any post I make appears in your Home feed. Similarly, with the ActivityPub plugin, you can find and follow Jane's profile at `@jane@example.com`. diff --git a/src/editor-plugin/plugin.js b/src/editor-plugin/plugin.js index d320f2811..bff06e71b 100644 --- a/src/editor-plugin/plugin.js +++ b/src/editor-plugin/plugin.js @@ -161,7 +161,7 @@ const EditorPlugin = () => { <SelectControl label={ __( 'Who can quote this post?', 'activitypub' ) } help={ __( - 'Quoting allows others to reshare your post while adding their own commentary.', + 'Quoting allows others to cite your post while adding their own commentary.', 'activitypub' ) } value={ meta?.activitypub_interaction_policy_quote } From a90665bb5cded4a0d8fb139479f8d4b354a88dbb Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle <pfefferle@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:22:04 +0200 Subject: [PATCH 51/52] Use `bp_members_get_user_url` if available for author URLs (#2292) --- integration/class-buddypress.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/integration/class-buddypress.php b/integration/class-buddypress.php index 1e86ee5fc..e3798a8d5 100644 --- a/integration/class-buddypress.php +++ b/integration/class-buddypress.php @@ -29,7 +29,11 @@ public static function init() { * @return object The author object. */ public static function add_user_metadata( $author, $author_id ) { - $author->url = bp_core_get_user_domain( $author_id ); // Add BP member profile URL as user URL. + if ( \function_exists( 'bp_members_get_user_url' ) ) { + $author->url = bp_members_get_user_url( $author_id ); + } else { + $author->url = bp_core_get_user_domain( $author_id ); + } // Add BuddyPress' cover_image instead of WordPress' header_image. $cover_image_url = bp_attachments_get_attachment( 'url', array( 'item_id' => $author_id ) ); @@ -48,9 +52,9 @@ public static function add_user_metadata( $author, $author_id ) { 'value' => \html_entity_decode( sprintf( '<a rel="me" title="%s" target="_blank" href="%s">%s</a>', - \esc_attr( bp_core_get_user_domain( $author_id ) ), - \bp_core_get_user_domain( $author_id ), - \wp_parse_url( \bp_core_get_user_domain( $author_id ), \PHP_URL_HOST ) + \esc_attr( $author->url ), + \esc_url( $author->url ), + \wp_parse_url( $author->url, \PHP_URL_HOST ) ), \ENT_QUOTES, 'UTF-8' From 34cf1b58c875100de44baee436253ba20613a274 Mon Sep 17 00:00:00 2001 From: Matthias Pfefferle <pfefferle@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:24:23 +0200 Subject: [PATCH 52/52] Exclude build asset files from PHP GitHub Actions triggers (#2293) --- .github/workflows/extract-wp-hooks.yml | 4 +++- .github/workflows/phpcs.yml | 2 ++ .github/workflows/phpunit.yml | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/extract-wp-hooks.yml b/.github/workflows/extract-wp-hooks.yml index af1598965..2f0916e3c 100644 --- a/.github/workflows/extract-wp-hooks.yml +++ b/.github/workflows/extract-wp-hooks.yml @@ -3,7 +3,9 @@ name: Extract WordPress Hooks on: push: branches: [trunk] - paths: ['**.php'] + paths: + - '**.php' + - '!build/**/*.asset.php' workflow_dispatch: jobs: diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml index f4eced094..4a927d2ee 100644 --- a/.github/workflows/phpcs.yml +++ b/.github/workflows/phpcs.yml @@ -10,6 +10,7 @@ on: - 'phpunit.xml.dist' - 'phpcs.xml' - '.github/workflows/phpcs.yml' + - '!build/**/*.asset.php' pull_request: paths: - '**/*.php' @@ -18,6 +19,7 @@ on: - 'phpunit.xml.dist' - 'phpcs.xml' - '.github/workflows/phpcs.yml' + - '!build/**/*.asset.php' jobs: phpcs: runs-on: ubuntu-latest diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index b7ea9ed36..11eae59bb 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -10,6 +10,7 @@ on: - 'phpunit.xml.dist' - 'phpcs.xml' - '.github/workflows/phpunit.yml' + - '!build/**/*.asset.php' pull_request: paths: - '**/*.php' @@ -18,6 +19,7 @@ on: - 'phpunit.xml.dist' - 'phpcs.xml' - '.github/workflows/phpunit.yml' + - '!build/**/*.asset.php' jobs: phpunit: runs-on: ubuntu-latest