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/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/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/.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/.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/.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/.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/.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/.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/.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 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/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 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 6189004bc..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 @@ -145,7 +147,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/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/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 diff --git a/FEDERATION.md b/FEDERATION.md index 90aa8ccc7..adcbcb4c3 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) @@ -21,6 +22,8 @@ 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) +- [FEP-3b86: Activity Intents](https://codeberg.org/fediverse/fep/src/branch/main/fep/3b86/fep-3b86.md) Partially supported FEPs diff --git a/activitypub.php b/activitypub.php index b15eedc35..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__ ) ); @@ -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/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/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 ), }, ] ); diff --git a/build/editor-plugin/plugin.asset.php b/build/editor-plugin/plugin.asset.php index b7be0abdf..392557751 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' => '12df5cf70e99e55c6091'); diff --git a/build/editor-plugin/plugin.js b/build/editor-plugin/plugin.js index 1c17b3b4c..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/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/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 d371c540d..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' => 'b24c13a1511313a54eb6'); + 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 4c657e653..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),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={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/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/includes/activity/class-activity.php b/includes/activity/class-activity.php index 1bc5c123e..12851cb79 100644 --- a/includes/activity/class-activity.php +++ b/includes/activity/class-activity.php @@ -18,10 +18,29 @@ * * @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( 'https://www.w3.org/ns/activitystreams', + array( + 'toot' => 'http://joinmastodon.org/ns#', + 'QuoteRequest' => 'toot:QuoteRequest', + ), ); /** @@ -50,6 +69,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-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 500670a9b..0da79d3bc 100644 --- a/includes/activity/class-generic-object.php +++ b/includes/activity/class-generic-object.php @@ -17,68 +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 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_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 { @@ -223,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 ); @@ -240,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/activity/extended-object/class-quote-authorization.php b/includes/activity/extended-object/class-quote-authorization.php new file mode 100644 index 000000000..74860e530 --- /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-activitypub.php b/includes/class-activitypub.php index d2af98adb..74a9cfd7e 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 7.5.0 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__, '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 d8ca2591c..ff90f6b39 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( '/' ) ); } /** @@ -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.', '7.5.0' ); + + return array(); + } + return array_keys( self::get_comment_types() ); } 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-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-migration.php b/includes/class-migration.php index e7a55a222..741b2f53a 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; @@ -24,11 +25,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 +124,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 +161,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', '<' ) ) { @@ -203,6 +205,10 @@ public static function maybe_migrate() { self::remove_pending_application_user_follow_requests(); } + if ( \version_compare( $version_from_db, '7.5.0', '<' ) ) { + self::sync_jetpack_following_meta(); + } + // Ensure all required cron schedules are registered. Scheduler::register_schedules(); @@ -231,49 +237,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 +478,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 +504,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(); } /** @@ -1075,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/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/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-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/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 new file mode 100644 index 000000000..bfa0da20e --- /dev/null +++ b/includes/class-router.php @@ -0,0 +1,284 @@ +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'] ); + unset( $query_params['stamp'] ); + + 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[] = 'stamp'; + $vars[] = 'type'; + $vars[] = 'c'; + $vars[] = 'p'; + + return $vars; + } +} diff --git a/includes/class-scheduler.php b/includes/class-scheduler.php index e79300a89..1cccdf066 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.', '7.5.0' ); + 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/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/includes/collection/class-following.php b/includes/collection/class-following.php index 0f28701ad..2899a8fe6 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 || \is_wp_error( $id ) ) { + return new \WP_Error( 'activitypub_follow_failed', 'Failed to add follow to outbox' ); + } } return $post; 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. */ 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 e9e052fcb..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. @@ -85,7 +84,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 +100,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 ); } /** @@ -981,7 +986,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. @@ -1289,12 +1299,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; @@ -1311,14 +1333,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 ); } /** @@ -1570,7 +1593,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 ) ) { 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/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/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/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/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/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/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/includes/transformer/class-post.php b/includes/transformer/class-post.php index accd89876..4692d2c3a 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(); @@ -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/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/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/includes/wp-admin/table/class-blocked-actors.php b/includes/wp-admin/table/class-blocked-actors.php index ba5279d31..85911ffb5 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 7.5.0 + * + * @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..84711b9b7 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 7.5.0 + * + * @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..ff711f4fe 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 7.5.0 + * + * @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-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( '%s', - \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' diff --git a/integration/class-jetpack.php b/integration/class-jetpack.php index f711c3aef..3457c00ae 100644 --- a/integration/class-jetpack.php +++ b/integration/class-jetpack.php @@ -8,7 +8,9 @@ namespace Activitypub\Integration; use Activitypub\Collection\Followers; +use Activitypub\Collection\Following; use Activitypub\Comment; +use Automattic\Jetpack\Connection\Manager; /** * Jetpack integration class. @@ -19,9 +21,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_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( '\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' ) ); + } } /** @@ -32,14 +46,23 @@ 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; + } + + /** + * 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; } /** @@ -49,6 +72,60 @@ 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() ) ); } + + /** + * 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 ); + + // 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/feeds/%d', (int) $feed['feed_id'] ); + } else { + $url = sprintf( 'https://wordpress.com/reader/feeds/lookup/%s', rawurlencode( $item['identifier'] ) ); + } + + return array_merge( + array( + 'reader' => sprintf( + '%2$s %3$s', + esc_url( $url ), + esc_html__( 'View Feed', 'activitypub' ), + /* translators: Hidden accessibility text. */ + esc_html__( '(opens in a new tab)', '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/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/integration/class-webfinger.php b/integration/class-webfinger.php index 6b6ed5375..359d8c48c 100644 --- a/integration/class-webfinger.php +++ b/integration/class-webfinger.php @@ -23,6 +23,8 @@ 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_data', array( self::class, 'add_interaction_links' ), 11 ); } /** @@ -55,11 +57,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 +98,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 +109,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/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/package-lock.json b/package-lock.json index 081d26e21..933fab8d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,18 +9,18 @@ "devDependencies": { "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.4.3", - "@wordpress/api-fetch": "^7.23.0", - "@wordpress/block-editor": "^15.0.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/block-editor": "^15.5.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", - "@wordpress/edit-post": "^8.31.0", - "@wordpress/editor": "^14.30.0", + "@wordpress/edit-post": "^8.32.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", @@ -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" }, @@ -6679,41 +6882,67 @@ } }, "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", "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.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", "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.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": { @@ -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,31 +7168,23 @@ "@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.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": { @@ -6950,9 +7193,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": { @@ -6963,10 +7206,23 @@ "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.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 +7230,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", @@ -7030,47 +7286,60 @@ "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.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", @@ -7090,10 +7359,23 @@ "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.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": { @@ -7104,29 +7386,42 @@ "npm": ">=8.19.2" } }, - "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==", + "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": "GPL-2.0-or-later", + "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.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", @@ -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": { @@ -7159,20 +7467,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" }, @@ -7185,10 +7493,23 @@ "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.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 +7525,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", @@ -7248,38 +7569,35 @@ "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": { - "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", @@ -7293,30 +7611,43 @@ "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.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", @@ -7332,21 +7663,34 @@ "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.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", @@ -7363,28 +7707,41 @@ "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.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", @@ -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", @@ -7413,14 +7783,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" }, @@ -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": { @@ -7454,29 +7837,42 @@ "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", "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.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", @@ -7484,9 +7880,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": { @@ -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": { @@ -7520,41 +7942,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" }, @@ -7567,49 +7989,62 @@ "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.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", @@ -7631,17 +8066,30 @@ "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.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", @@ -7652,10 +8100,23 @@ "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.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": { @@ -7681,9 +8142,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": { @@ -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", @@ -7795,36 +8240,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", @@ -7838,10 +8283,23 @@ "react": "^18.0.0" } }, + "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": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "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": { @@ -7852,10 +8310,23 @@ "npm": ">=8.19.2" } }, + "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.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": { @@ -7866,16 +8337,29 @@ "npm": ">=8.19.2" } }, - "node_modules/@wordpress/i18n": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.4.0.tgz", - "integrity": "sha512-tLTjdLw8H778K4fmEo5NDLYJOAgvHxgfLU5N7lPuBy2TKi8tQl24xgmJOlDLiMzbmbSEwvUBZ/4xWJsGq9ITDQ==", - "dev": true, - "license": "GPL-2.0-or-later", + "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, + "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" @@ -7888,26 +8372,52 @@ "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.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", "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.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 +8430,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": { @@ -7936,24 +8446,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": { @@ -7965,10 +8475,23 @@ "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.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": { @@ -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": { @@ -8017,16 +8566,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", @@ -8036,50 +8585,89 @@ "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.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", "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.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", "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.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", @@ -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": { @@ -8104,27 +8705,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", @@ -8135,21 +8736,34 @@ "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.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": { @@ -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": { @@ -8180,22 +8807,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": { @@ -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": { @@ -8222,14 +8862,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": { @@ -8240,10 +8880,23 @@ "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.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": { @@ -8255,10 +8908,23 @@ "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.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": { @@ -8269,10 +8935,23 @@ "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.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": { @@ -8289,25 +8968,38 @@ "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.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", @@ -8318,22 +9010,35 @@ "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.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" }, @@ -8345,18 +9050,31 @@ "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.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" }, @@ -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,61 +9185,23 @@ } } }, - "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.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", @@ -8519,10 +9212,23 @@ "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.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": { @@ -8534,10 +9240,23 @@ "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.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": { @@ -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": { @@ -8570,15 +9302,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", @@ -8588,56 +9320,95 @@ "yjs": "~13.6.6" }, "engines": { - "node": ">=18.12.0", - "npm": ">=8.19.2" + "node": ">=18.12.0", + "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", + "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": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "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==", + "node_modules/@wordpress/undo-manager": { + "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" + "@babel/runtime": "7.25.7", + "@wordpress/is-shallow-equal": "^5.32.0" }, "engines": { "node": ">=18.12.0", "npm": ">=8.19.2" } }, - "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==", + "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": "GPL-2.0-or-later", + "license": "MIT", "dependencies": { - "@babel/runtime": "7.25.7", - "@wordpress/is-shallow-equal": "^5.31.0" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">=18.12.0", - "npm": ">=8.19.2" + "node": ">=6.9.0" } }, "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": { @@ -8649,10 +9420,23 @@ "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.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": { @@ -8664,17 +9448,30 @@ "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.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", @@ -8684,10 +9481,23 @@ "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.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": { @@ -8696,24 +9506,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": { @@ -8725,10 +9535,23 @@ "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.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": { @@ -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", @@ -16052,21 +17311,77 @@ "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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/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" @@ -22594,30 +24454,9 @@ "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" + "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,23 +24899,29 @@ "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": { - "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": { @@ -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" }, diff --git a/package.json b/package.json index a56fda6a7..205d10b85 100644 --- a/package.json +++ b/package.json @@ -33,18 +33,18 @@ "devDependencies": { "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.4.3", - "@wordpress/api-fetch": "^7.23.0", - "@wordpress/block-editor": "^15.0.0", + "@wordpress/api-fetch": "^7.32.0", + "@wordpress/block-editor": "^15.5.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", - "@wordpress/edit-post": "^8.31.0", - "@wordpress/editor": "^14.30.0", + "@wordpress/edit-post": "^8.32.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", 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/phpunit/data/mocks/class-jetpack.php b/phpunit/data/mocks/class-jetpack.php new file mode 100644 index 000000000..e9cb0fdd2 --- /dev/null +++ b/phpunit/data/mocks/class-jetpack.php @@ -0,0 +1,22 @@ +assertEquals( 'production', \wp_get_environment_type() ); + } + + /** + * Test post type support. + * + * @covers ::init + */ + public function test_post_type_support() { + \add_post_type_support( 'post', 'activitypub' ); + \add_post_type_support( 'page', 'activitypub' ); + + $this->assertContains( 'post', \get_post_types_by_support( 'activitypub' ) ); + $this->assertContains( 'page', \get_post_types_by_support( 'activitypub' ) ); + } + + /** + * Test activity type meta sanitization. + * + * @dataProvider activity_meta_sanitization_provider + * @covers \Activitypub\Post_Types::register_outbox_post_type + * + * @param string $meta_key Meta key. + * @param mixed $meta_value Meta value. + * @param mixed $expected Expected value for invalid meta value. + */ + public function test_activity_meta_sanitization( $meta_key, $meta_value, $expected ) { + $post_id = self::factory()->post->create( + array( + 'post_type' => Outbox::POST_TYPE, + 'meta_input' => array( $meta_key => $meta_value ), + ) + ); + + $this->assertEquals( $meta_value, \get_post_meta( $post_id, $meta_key, true ) ); + + \wp_update_post( + array( + 'ID' => $post_id, + 'meta_input' => array( $meta_key => 'InvalidType' ), + ) + ); + $this->assertEquals( $expected, \get_post_meta( $post_id, $meta_key, true ) ); + + \wp_delete_post( $post_id, true ); + } + + /** + * Data provider for test_activity_meta_sanitization. + * + * @return array + */ + public function activity_meta_sanitization_provider() { + return array( + array( '_activitypub_activity_type', 'Create', 'Announce' ), + array( '_activitypub_activity_actor', 'user', 'user' ), + array( '_activitypub_activity_actor', 'blog', 'user' ), + ); + } +} 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 95% rename from tests/includes/class-test-functions.php rename to phpunit/tests/includes/class-test-functions.php index 2cdee032c..9374893dc 100644 --- a/tests/includes/class-test-functions.php +++ b/phpunit/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 ) ); } /** @@ -1361,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-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 92% rename from tests/includes/class-test-migration.php rename to phpunit/tests/includes/class-test-migration.php index 03e346790..64b4eb9b5 100644 --- a/tests/includes/class-test-migration.php +++ b/phpunit/tests/includes/class-test-migration.php @@ -11,10 +11,12 @@ 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\Comment; use Activitypub\Migration; +use Activitypub\Scheduler; /** * Test class for Activitypub Migrate. @@ -34,6 +36,11 @@ class Test_Migration extends \WP_UnitTestCase { * Set up the test. */ 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/mocks/class-jetpack.php'; + } + \remove_action( 'wp_after_insert_post', array( \Activitypub\Scheduler\Post::class, 'schedule_post_activity' ), 33 ); \remove_action( 'transition_comment_status', array( \Activitypub\Scheduler\Comment::class, 'schedule_comment_activity' ), 20 ); \remove_action( 'wp_insert_comment', array( \Activitypub\Scheduler\Comment::class, 'schedule_comment_activity_on_insert' ) ); @@ -168,23 +175,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 +387,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 +410,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 +481,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' ); } @@ -1175,4 +1103,74 @@ public function test_remove_pending_application_user_follow_requests_multiple_en // Clean up. \wp_delete_post( $post_id, true ); } + + /** + * Test sync_jetpack_following_meta triggers actions correctly. + * + * @covers ::sync_jetpack_following_meta + */ + public function test_sync_jetpack_following_meta() { + // Create test posts with following meta. + $posts = self::factory()->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 ); + } } 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 94% rename from tests/includes/class-test-post-types.php rename to phpunit/tests/includes/class-test-post-types.php index 099c94655..2dbd20398 100644 --- a/tests/includes/class-test-post-types.php +++ b/phpunit/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' ); diff --git a/tests/includes/class-test-query.php b/phpunit/tests/includes/class-test-query.php similarity index 73% rename from tests/includes/class-test-query.php rename to phpunit/tests/includes/class-test-query.php index 84fc5442f..5dec259bc 100644 --- a/tests/includes/class-test-query.php +++ b/phpunit/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/class-test-activitypub.php b/phpunit/tests/includes/class-test-router.php similarity index 68% rename from tests/includes/class-test-activitypub.php rename to phpunit/tests/includes/class-test-router.php index 7d13b6050..060b33c62 100644 --- a/tests/includes/class-test-activitypub.php +++ b/phpunit/tests/includes/class-test-router.php @@ -1,22 +1,22 @@ user->create( array( 'role' => 'author', @@ -42,106 +44,7 @@ public static function wpSetUpBeforeClass( $factory ) { */ public function setUp(): void { parent::setUp(); - Activitypub::init(); - } - - /** - * Test environment. - */ - public function test_test_env() { - $this->assertEquals( 'production', \wp_get_environment_type() ); - } - - /** - * Test post type support. - * - * @covers ::init - */ - public function test_post_type_support() { - \add_post_type_support( 'post', 'activitypub' ); - \add_post_type_support( 'page', 'activitypub' ); - - $this->assertContains( 'post', \get_post_types_by_support( 'activitypub' ) ); - $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. - * - * @dataProvider activity_meta_sanitization_provider - * @covers \Activitypub\Post_Types::register_outbox_post_type - * - * @param string $meta_key Meta key. - * @param mixed $meta_value Meta value. - * @param mixed $expected Expected value for invalid meta value. - */ - public function test_activity_meta_sanitization( $meta_key, $meta_value, $expected ) { - $post_id = self::factory()->post->create( - array( - 'post_type' => Outbox::POST_TYPE, - 'meta_input' => array( $meta_key => $meta_value ), - ) - ); - - $this->assertEquals( $meta_value, \get_post_meta( $post_id, $meta_key, true ) ); - - wp_update_post( - array( - 'ID' => $post_id, - 'meta_input' => array( $meta_key => 'InvalidType' ), - ) - ); - $this->assertEquals( $expected, \get_post_meta( $post_id, $meta_key, true ) ); - - wp_delete_post( $post_id, true ); - } - - /** - * Data provider for test_activity_meta_sanitization. - * - * @return array - */ - public function activity_meta_sanitization_provider() { - return array( - array( '_activitypub_activity_type', 'Create', 'Announce' ), - array( '_activitypub_activity_actor', 'user', 'user' ), - array( '_activitypub_activity_actor', 'blog', 'user' ), - ); + Router::init(); } /** @@ -159,6 +62,8 @@ public function test_custom_post_type_returns_200() { ) ); + \add_post_type_support( 'test_cpt', 'activitypub' ); + // Create a post with the custom post type. $post_id = self::factory()->post->create( array( @@ -177,7 +82,7 @@ public function test_custom_post_type_returns_200() { $this->go_to( '/?p=' . $post_id ); // Test the template response. - $template = Activitypub::render_activitypub_template( 'index.php' ); + $template = Router::render_activitypub_template( 'index.php' ); $this->assertStringContainsString( 'activitypub-json.php', $template ); $this->assertFalse( $wp_query->is_404 ); @@ -187,7 +92,9 @@ public function test_custom_post_type_returns_200() { } /** - * Test that ActivityPub requests for custom post types return 200. + * 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 */ @@ -220,7 +127,7 @@ public function test_custom_post_type_with_support_returns_200() { $this->go_to( '/?p=' . $post_id ); // Test the template response. - $template = Activitypub::render_activitypub_template( 'index.php' ); + $template = Router::render_activitypub_template( 'index.php' ); $this->assertStringContainsString( 'activitypub-json.php', $template ); $this->assertFalse( $wp_query->is_404 ); @@ -245,7 +152,7 @@ public function test_outbox_post_type_non_activitypub_request_returns_406() { $_SERVER['HTTP_ACCEPT'] = 'application/activity+json'; $this->go_to( '/?p=' . $post_id ); - $template = Activitypub::render_activitypub_template( 'index.php' ); + $template = Router::render_activitypub_template( 'index.php' ); $this->assertStringContainsString( 'activitypub-json.php', $template ); Query::get_instance()->__destruct(); @@ -262,7 +169,7 @@ function ( $status_header ) use ( &$status ) { unset( $_SERVER['HTTP_ACCEPT'] ); $this->go_to( '/?p=' . $post_id ); - $template = Activitypub::render_activitypub_template( 'index.php' ); + $template = Router::render_activitypub_template( 'index.php' ); $this->assertStringContainsString( 'index.php', $template ); $this->assertStringContainsString( '406', $status ); @@ -280,7 +187,7 @@ public function test_no_trailing_redirect() { $requested_url = 'https://example.org/@testuser'; $redirect_url = 'https://example.org/@testuser/'; - $result = Activitypub::no_trailing_redirect( $redirect_url, $requested_url ); + $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. @@ -288,10 +195,47 @@ public function test_no_trailing_redirect() { $requested_url = 'https://example.org/some-page'; $redirect_url = 'https://example.org/some-page/'; - $result = Activitypub::no_trailing_redirect( $redirect_url, $requested_url ); + $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 ); + } } 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 85% rename from tests/includes/class-test-scheduler.php rename to phpunit/tests/includes/class-test-scheduler.php index 80af07ea9..e675bed90 100644 --- a/tests/includes/class-test-scheduler.php +++ b/phpunit/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. * 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 51% rename from tests/includes/collection/class-test-extra-fields.php rename to phpunit/tests/includes/collection/class-test-extra-fields.php index 04bb32423..0b78f646c 100644 --- a/tests/includes/collection/class-test-extra-fields.php +++ b/phpunit/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'] ); + } } 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 66% rename from tests/includes/collection/class-test-remote-actors.php rename to phpunit/tests/includes/collection/class-test-remote-actors.php index 7b45ab73d..747aa2070 100644 --- a/tests/includes/collection/class-test-remote-actors.php +++ b/phpunit/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' ); } /** 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 99% rename from tests/includes/handler/class-test-create.php rename to phpunit/tests/includes/handler/class-test-create.php index 817778821..0019c3ffc 100644 --- a/tests/includes/handler/class-test-create.php +++ b/phpunit/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 ); 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 57% rename from tests/includes/handler/class-test-inbox.php rename to phpunit/tests/includes/handler/class-test-inbox.php index 59f7c4a02..7c11cc888 100644 --- a/tests/includes/handler/class-test-inbox.php +++ b/phpunit/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', + ), ); } } 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/phpunit/tests/includes/handler/class-test-quote-request.php b/phpunit/tests/includes/handler/class-test-quote-request.php new file mode 100644 index 000000000..346363477 --- /dev/null +++ b/phpunit/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(); + } +} 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 87% rename from tests/includes/rest/class-test-nodeinfo-controller.php rename to phpunit/tests/includes/rest/class-test-nodeinfo-controller.php index 65f6f9b01..c797a4f92 100644 --- a/tests/includes/rest/class-test-nodeinfo-controller.php +++ b/phpunit/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/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 99% rename from tests/includes/rest/class-test-webfinger-controller.php rename to phpunit/tests/includes/rest/class-test-webfinger-controller.php index 6772d7a46..e6025bed1 100644 --- a/tests/includes/rest/class-test-webfinger-controller.php +++ b/phpunit/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/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 92% rename from tests/includes/scheduler/class-test-post.php rename to phpunit/tests/includes/scheduler/class-test-post.php index 9516bbfde..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 ); @@ -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 ); } 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 92% rename from tests/includes/transformer/class-test-factory.php rename to phpunit/tests/includes/transformer/class-test-factory.php index 4d324dcf8..aaffba8f0 100644 --- a/tests/includes/transformer/class-test-factory.php +++ b/phpunit/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 ); } 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/phpunit/tests/includes/wp-admin/class-test-health-check.php b/phpunit/tests/includes/wp-admin/class-test-health-check.php new file mode 100644 index 000000000..64c55ac0d --- /dev/null +++ b/phpunit/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 ); + } +} 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/phpunit/tests/integration/class-test-jetpack.php b/phpunit/tests/integration/class-test-jetpack.php new file mode 100644 index 000000000..5692bf326 --- /dev/null +++ b/phpunit/tests/integration/class-test-jetpack.php @@ -0,0 +1,374 @@ +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', + ) + ); + } + + /** + * Load mock Manager class for specific tests. + */ + private function load_mock_manager() { + if ( ! class_exists( '\Automattic\Jetpack\Connection\Manager' ) ) { + require_once AP_TESTS_DIR . '/data/mocks/class-manager.php'; + } + } + + /** + * 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 without Manager class. + * + * This test must run before the Manager class is loaded to test the behavior + * when the class doesn't exist. + * + * @covers ::init + */ + public function test_a_init_registers_sync_hooks_without_manager() { + // Verify Manager class is not yet loaded. + $this->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 without Manager class loaded. + Jetpack::init(); + + // 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 init method registers all hooks with Manager class available. + * + * @covers ::init + */ + 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 with Manager class. + Jetpack::init(); + + // 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' ); + } + + /** + * 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 ) ); + } + + /** + * 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. + * + * @return array Test cases with different following item configurations. + */ + public function reader_link_data() { + return array( + '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, + ), + '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/feeds/456', + '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' ); + + // Set up WPCOM environment if expecting WPCOM-style URL. + $is_wpcom_test = $expected_url && strpos( $expected_url, '/reader/feeds/lookup/' ) === 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( + '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' ); + } +} diff --git a/phpunit/tests/integration/class-test-nodeinfo.php b/phpunit/tests/integration/class-test-nodeinfo.php new file mode 100644 index 000000000..46bfed641 --- /dev/null +++ b/phpunit/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 ); + } +} 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/phpunit/tests/integration/class-test-webfinger.php b/phpunit/tests/integration/class-test-webfinger.php new file mode 100644 index 000000000..a7a957385 --- /dev/null +++ b/phpunit/tests/integration/class-test-webfinger.php @@ -0,0 +1,361 @@ +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_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 ); + } + } +} 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/readme.txt b/readme.txt index ebf8edb7b..7cb7ab959 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 @@ -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`. @@ -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 == 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 = () => { { + // 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/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 ); 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 || '', + } ); + }, + }, + ], + }, } ); 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 - } -}