diff --git a/10up-experience.php b/10up-experience.php index 533ffdc..fa9d994 100644 --- a/10up-experience.php +++ b/10up-experience.php @@ -3,7 +3,7 @@ * Plugin Name: 10up Experience * Plugin URI: https://github.com/10up/10up-experience * Description: The 10up Experience plugin configures WordPress to better protect and inform clients, aligned to 10up’s best practices. - * Version: 1.9.1 + * Version: 1.10.0 * Author: 10up * Author URI: https://10up.com * License: GPLv2 or later @@ -19,7 +19,7 @@ use Puc_v4_Factory; -define( 'TENUP_EXPERIENCE_VERSION', '1.9.1' ); +define( 'TENUP_EXPERIENCE_VERSION', '1.10.0' ); define( 'TENUP_EXPERIENCE_DIR', __DIR__ ); define( 'TENUP_EXPERIENCE_FILE', __FILE__ ); @@ -75,19 +75,20 @@ function( $plugin_info, $http_response = null ) { define( 'TENUP_EXPERIENCE_IS_NETWORK', (bool) $network_activated ); if ( ! defined( 'TENUP_DISABLE_BRANDING' ) || ! TENUP_DISABLE_BRANDING ) { - AdminCustomizations\Customizations::instance()->setup(); + AdminCustomizations\Customizations::instance(); } -API\API::instance()->setup(); -Authentication\Usernames::instance()->setup(); -Authors\Authors::instance()->setup(); -Gutenberg\Gutenberg::instance()->setup(); -Headers\Headers::instance()->setup(); -Plugins\Plugins::instance()->setup(); -PostPasswords\PostPasswords::instance()->setup(); -SupportMonitor\Monitor::instance()->setup(); -SupportMonitor\Debug::instance()->setup(); -Notifications\Welcome::instance()->setup(); +API\API::instance(); +Authentication\Usernames::instance(); +Authors\Authors::instance(); +Gutenberg\Gutenberg::instance(); +Headers\Headers::instance(); +Plugins\Plugins::instance(); +PostPasswords\PostPasswords::instance(); +SupportMonitor\Monitor::instance(); +SupportMonitor\Debug::instance(); +SupportMonitor\ActivityLog::instance(); +Notifications\Welcome::instance(); /** * We load this later to make sure there are no conflicts with other plugins. @@ -95,8 +96,8 @@ function( $plugin_info, $http_response = null ) { add_action( 'plugins_loaded', function() { - Authentication\Passwords::instance()->setup(); - SSO\SSO::instance()->setup(); + Authentication\Passwords::instance(); + SSO\SSO::instance(); } ); diff --git a/CHANGELOG.md b/CHANGELOG.md index c899c13..f8bb24f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file, per [the Keep a Changelog standard](http://keepachangelog.com/). +## [1.10.0] - 2022-09-13 +### Added +* Added Activity Log +* Support for PHP 8.1 + ## [1.9.0] - 2022-03-21 ### Added * Bundled 10up SSO plugin into 10up Experience diff --git a/README.md b/README.md index 7d29d61..44d1387 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## Requirements -* PHP 5.3+ +* PHP 5.4+ * [WordPress](http://wordpress.org) 4.7+ ## Installation @@ -100,6 +100,58 @@ There are 2 filters available here: - `TENUPSSO_DISABLE` - Define this as `true` to disable SSO. - `TENUPSSO_DISALLOW_ALL_DIRECT_LOGIN` - Define this as `true` to disable username/password log ins completely. +* __Activity Log__ + +The Activity Log tracks key actions taken by logged in users and stores them in Support Monitor. Note that no PII is stored. This feature can be disabled by defining `TENUP_DISABLE_ACTIVITYLOG` as `true`. + +## Logged Actions +​ +- `profile_update` Runs when a user profile is updated. Example log message: "User 1 profile updated." +- `set_user_role` Runs when a user's role has changed. Example log message: "User 1 role changed from editor to administator." +- `updated_user_meta` Runs when certain user metadata has changed. Example log message: "User 1 meta updated. Key: nickname." +- `user_register` Runs when a new user is registered. Example log message: "User 1 registered." +- `deleted_user` Runs when a user is deleted. Example log message: "User 1 deleted." +- `wp_login` Runs when a user logs in. Example log message: "User 1 logged in." +- `activated_plugin` Runs when a plugin is activated. Example log message: "Plugin wordpress-seo is activated." +- `delete_plugin` Runs when a plugin is deleted. Example log message: "Plugin wordpress-seo" is deleted. +- `switch_theme` Runs the theme changes. Example log message: "Theme switch to twentytwentytwo from twentytwentyone." +- `deleted_theme` Runs when a theme is deleted from the site. Example log message: "Theme twentytwentyone is deleted." +- `updated_option` Runs when one of a specified set of core options changes. Example log message: "Option `users_can_register` is updated." +- `added_option` Runs when one of a specified set of core options is added. Example log message: "Option `users_can_register` is added." +​ +## Filters +​ +### tenup_experience_logged_user_meta_changes +​ +Filters the user meta keys whose changes should be logged. +​ +@param array $meta_keys The user meta keys to log. +​ +### tenup_support_monitor_logged_option_changes +​ +Filters the option keys whose changes should be logged. +​ +@param array $option_keys The option keys to log. +​ +### tenup_support_monitor_log_item +​ +Filters whether to log a message. +​ +@param array $data Associative array of data related to the action. +@param string $subgroup String representing a group of logged actions, e.g. 'users' or 'plugins'. +​ +### tenup_support_monitor_max_activity_log_count +​ +Filters how many log items to store. Items are stored in array saved to the options table. Default is 500. +​ +@param int The number of log items to keep. Default 500. + +## Constants + +### TENUP_DISABLE_ACTIVITYLOG + +Define `TENUP_DISABLE_ACTIVITYLOG` as `true` to disable Activity Log. + ## Support Level **Active:** 10up is actively working on this, and we expect to continue work for the foreseeable future including keeping tested up to the most recent version of WordPress. Bug reports, feature requests, questions, and pull requests are welcome. diff --git a/composer.json b/composer.json index f211395..6f93e92 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "source": "https://github.com/10up/10up-experience" }, "require": { - "yahnis-elsts/plugin-update-checker": "4.8.1", + "yahnis-elsts/plugin-update-checker": "4.13", "bjeavons/zxcvbn-php": "^1.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index eaff001..b100d4e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cc203d3fccda829dd244872bc8fcb1ba", + "content-hash": "35ba26be240939acba1949855bfd5221", "packages": [ { "name": "bjeavons/zxcvbn-php", @@ -139,25 +139,26 @@ }, { "name": "yahnis-elsts/plugin-update-checker", - "version": "v4.8.1", + "version": "v4.13", "source": { "type": "git", "url": "https://github.com/YahnisElsts/plugin-update-checker.git", - "reference": "908249c92e81c46cb66e4d81632c5e917dc879ae" + "reference": "6eb27a6911e0e0880d09e5b11f577d3f688f7da7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/908249c92e81c46cb66e4d81632c5e917dc879ae", - "reference": "908249c92e81c46cb66e4d81632c5e917dc879ae", + "url": "https://api.github.com/repos/YahnisElsts/plugin-update-checker/zipball/6eb27a6911e0e0880d09e5b11f577d3f688f7da7", + "reference": "6eb27a6911e0e0880d09e5b11f577d3f688f7da7", "shasum": "" }, "require": { + "ext-json": "*", "php": ">=5.2.0" }, "type": "library", "autoload": { "files": [ - "load-v4p8.php" + "load-v4p13.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -180,7 +181,11 @@ "theme updates", "wordpress" ], - "time": "2019-10-08T12:15:30+00:00" + "support": { + "issues": "https://github.com/YahnisElsts/plugin-update-checker/issues", + "source": "https://github.com/YahnisElsts/plugin-update-checker/tree/v4.13" + }, + "time": "2022-07-29T12:36:25+00:00" } ], "packages-dev": [ @@ -5421,5 +5426,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.3.0" } diff --git a/includes/classes/API/API.php b/includes/classes/API/API.php index 5348d8f..bd427ac 100644 --- a/includes/classes/API/API.php +++ b/includes/classes/API/API.php @@ -12,7 +12,9 @@ /** * REST API customizations class */ -class API extends Singleton { +class API { + + use Singleton; /** * Default value for API restriction diff --git a/includes/classes/AdminCustomizations/Customizations.php b/includes/classes/AdminCustomizations/Customizations.php index 56c569f..23f2b53 100644 --- a/includes/classes/AdminCustomizations/Customizations.php +++ b/includes/classes/AdminCustomizations/Customizations.php @@ -12,7 +12,10 @@ /** * Admin Customizations class */ -class Customizations extends Singleton { +class Customizations { + + use Singleton; + /** * Setup module * diff --git a/includes/classes/Authentication/Passwords.php b/includes/classes/Authentication/Passwords.php index 8987909..acb1cfb 100644 --- a/includes/classes/Authentication/Passwords.php +++ b/includes/classes/Authentication/Passwords.php @@ -13,7 +13,9 @@ /** * Password extension functionality */ -class Passwords extends Singleton { +class Passwords { + + use Singleton; /** * Setup hooks * diff --git a/includes/classes/Authentication/Usernames.php b/includes/classes/Authentication/Usernames.php index bc90533..cfbb923 100644 --- a/includes/classes/Authentication/Usernames.php +++ b/includes/classes/Authentication/Usernames.php @@ -11,7 +11,9 @@ /** * Username extension functionality */ -class Usernames extends Singleton { +class Usernames { + + use Singleton; /** * Setup hooks diff --git a/includes/classes/Authors/Authors.php b/includes/classes/Authors/Authors.php index b5e5cab..376f4c9 100644 --- a/includes/classes/Authors/Authors.php +++ b/includes/classes/Authors/Authors.php @@ -12,7 +12,10 @@ /** * Authors class */ -class Authors extends Singleton { +class Authors { + + use Singleton; + /** * Setup module * diff --git a/includes/classes/Gutenberg/Gutenberg.php b/includes/classes/Gutenberg/Gutenberg.php index 845e04e..286a9d8 100644 --- a/includes/classes/Gutenberg/Gutenberg.php +++ b/includes/classes/Gutenberg/Gutenberg.php @@ -12,7 +12,10 @@ /** * Gutenberg class */ -class Gutenberg extends Singleton { +class Gutenberg { + + use Singleton; + /** * Setup module * diff --git a/includes/classes/Headers/Headers.php b/includes/classes/Headers/Headers.php index af1f3e4..b63107c 100644 --- a/includes/classes/Headers/Headers.php +++ b/includes/classes/Headers/Headers.php @@ -12,7 +12,10 @@ /** * Headers class */ -class Headers extends Singleton { +class Headers { + + use Singleton; + /** * Setup module */ diff --git a/includes/classes/Notifications/Welcome.php b/includes/classes/Notifications/Welcome.php index 338caa4..de0c97f 100644 --- a/includes/classes/Notifications/Welcome.php +++ b/includes/classes/Notifications/Welcome.php @@ -12,7 +12,10 @@ /** * Welcome notification class */ -class Welcome extends Singleton { +class Welcome { + + use Singleton; + /** * Setup module * diff --git a/includes/classes/Plugins/Plugins.php b/includes/classes/Plugins/Plugins.php index 4809fd3..10aab88 100644 --- a/includes/classes/Plugins/Plugins.php +++ b/includes/classes/Plugins/Plugins.php @@ -12,7 +12,10 @@ /** * Plugin class */ -class Plugins extends Singleton { +class Plugins { + + use Singleton; + /** * Setup module * diff --git a/includes/classes/PostPasswords/PostPasswords.php b/includes/classes/PostPasswords/PostPasswords.php index 3552b10..b532ef0 100644 --- a/includes/classes/PostPasswords/PostPasswords.php +++ b/includes/classes/PostPasswords/PostPasswords.php @@ -12,7 +12,10 @@ /** * Post passwords class */ -class PostPasswords extends Singleton { +class PostPasswords { + + use Singleton; + /** * Setup module * diff --git a/includes/classes/SSO/SSO.php b/includes/classes/SSO/SSO.php index 4848d29..d5ae07d 100644 --- a/includes/classes/SSO/SSO.php +++ b/includes/classes/SSO/SSO.php @@ -13,12 +13,15 @@ /** * SSO class */ -class SSO extends Singleton { +class SSO { + + use Singleton; /** * Setup SSO */ public function setup() { + // If using the old SSO plugin, do nothing. if ( function_exists( 'tenup_sso_add_login_errors' ) ) { return; diff --git a/includes/classes/Singleton.php b/includes/classes/Singleton.php index 14fb571..d6c640b 100644 --- a/includes/classes/Singleton.php +++ b/includes/classes/Singleton.php @@ -1,6 +1,6 @@ setup(); + if ( method_exists( static::$instance, 'setup' ) ) { + static::$instance->setup(); } } - return $instance; + return static::$instance; } } diff --git a/includes/classes/SupportMonitor/ActivityLog.php b/includes/classes/SupportMonitor/ActivityLog.php new file mode 100644 index 0000000..0c19649 --- /dev/null +++ b/includes/classes/SupportMonitor/ActivityLog.php @@ -0,0 +1,342 @@ + $value ) { + if ( isset( $old_user_data->data->$key ) && (string) $old_user_data->data->$key !== (string) $value ) { + $changed_keys[] = $key; + } + } + + Monitor::instance()->log( + [ + 'action' => 'profile_update', + 'summary' => 'User ' . $user_id . ' profile updated.' . ( ! empty( $changed_keys ) ? ' Changed: ' . implode( ', ', $changed_keys ) : '' ), + ], + 'users' + ); + } + + /** + * Log user role change + * + * @param int $user_id User ID. + * @param string $role Role name. + * @param array $old_roles Old roles. + */ + public function set_user_role( $user_id, $role, $old_roles ) { + if ( ! empty( $old_roles ) ) { // Don't log on user creation. + Monitor::instance()->log( + [ + 'action' => 'set_user_role', + 'summary' => 'User ' . $user_id . ' role changed from ' . implode( ', ', $old_roles ) . ' to ' . $role, + ], + 'users' + ); + } + } + + /** + * Provides keys of user meta changes to log. + * + * @return array + */ + private function get_user_meta_keys_to_log() { + $user_meta_keys_to_log = [ + 'description', + 'first_name', + 'last_name', + 'nickname', + ]; + + /** + * Filters the user meta keys to log. + * + * @param array $user_meta_keys_to_log + */ + return apply_filters( 'tenup_experience_logged_user_meta_changes', $user_meta_keys_to_log ); + } + + + /** + * Log user meta update + * + * @param int $meta_id ID of updated metadata entry. + * @param int $user_id User ID. + * @param string $meta_key Metadata key. + */ + public function updated_user_meta( $meta_id, $user_id, $meta_key ) { + if ( in_array( $meta_key, $this->get_user_meta_keys_to_log(), true ) ) { + Monitor::instance()->log( + [ + 'action' => 'updated_user_meta', + 'summary' => 'User ' . $user_id . ' meta updated. Key: ' . $meta_key, + ], + 'users' + ); + } + } + + /** + * New user created + * + * @param int $user_id User ID. + * @param array $userdata The raw array of data passed to wp_insert_user(). + */ + public function user_register( $user_id, $userdata ) { + Monitor::instance()->log( + [ + 'action' => 'user_register', + 'summary' => 'User ' . $user_id . ' created with role ' . $userdata['role'], + ], + 'users' + ); + } + + /** + * User deleted + * + * @param int $user_id User ID. + */ + public function deleted_user( $user_id ) { + Monitor::instance()->log( + [ + 'action' => 'deleted_user', + 'summary' => 'User ' . $user_id . ' deleted.', + ], + 'users' + ); + } + + /** + * User logged in + * + * @param string $user_login Username. + * @param object $user WP_User object of the logged-in user. + */ + public function wp_login( $user_login, $user ) { + Monitor::instance()->log( + [ + 'action' => 'wp_login', + 'summary' => 'User ' . $user->ID . ' logged in.', + ], + 'users' + ); + } + + /** + * Plugin is activated + * + * @param string $plugin Plugin path + * @param boolean $network_wide Whether the plugin is activated network wide + */ + public function activated_plugin( $plugin, $network_wide ) { + $msg = 'Plugin `' . $plugin . '` is activated'; + + if ( $network_wide ) { + $msg .= ' network-wide'; + } + + Monitor::instance()->log( + [ + 'action' => 'activated_plugin', + 'summary' => $msg, + ], + 'plugins' + ); + } + + /** + * Plugin is deactivated + * + * @param string $plugin Plugin path + * @param boolean $network_wide Whether the plugin is deactivated network wide + */ + public function deactivated_plugin( $plugin, $network_wide ) { + $msg = 'Plugin `' . $plugin . '` is deactivated'; + + if ( $network_wide ) { + $msg .= ' network-wide'; + } + + Monitor::instance()->log( + [ + 'action' => 'deactivated_plugin', + 'summary' => $msg, + ], + 'plugins' + ); + } + + /** + * Plugin is deleted + * + * @param string $plugin Plugin path + */ + public function delete_plugin( $plugin ) { + $msg = 'Plugin `' . $plugin . '` is deleted'; + + Monitor::instance()->log( + [ + 'action' => 'delete_plugin', + 'summary' => $msg, + ], + 'plugins' + ); + } + + /** + * Switch theme + * + * @param string $new_name Name of the new theme. + * @param WP_Theme $new_theme WP_Theme instance of the new theme. + * @param WP_Theme $old_theme WP_Theme instance of the old theme. + */ + public function switch_theme( $new_name, $new_theme, $old_theme ) { + Monitor::instance()->log( + [ + 'action' => 'switch_theme', + 'summary' => 'Theme switched to `' . $new_name . '` from `' . $old_theme->get( 'Name' ) . '`', + ], + 'themes' + ); + } + + /** + * Theme is deleted + * + * @param string $stylesheet Stylesheet name. + * @param boolean $deleted Whether the theme is deleted. + */ + public function deleted_theme( $stylesheet, $deleted ) { + if ( $deleted ) { + Monitor::instance()->log( + [ + 'action' => 'deleted_theme', + 'summary' => 'Theme `' . $stylesheet . '` is deleted', + ], + 'themes' + ); + } + } + + /** + * Provides options to log. + * + * @see https://codex.wordpress.org/Option_Reference + * @return array + */ + private function get_option_changes_to_log() { + $options_to_log = [ + 'admin_email', + 'adminhash', + 'blog_public', + 'blogname', + 'category_base', + 'default_comment_status', + 'default_role', + 'home', + 'page_for_posts', + 'page_on_front', + 'permalink_structure', + 'posts_per_page', + 'show_on_front', + 'siteurl', + 'tag_base', + 'upload_path', + 'upload_url_path', + 'users_can_register', + ]; + + /** + * Filters the options to log. + * + * @param array $options_to_log Options to log. + */ + return apply_filters( 'tenup_support_monitor_logged_option_changes', $options_to_log ); + } + + /** + * Option is updated + * + * @param string $option Option name. + */ + public function updated_option( $option ) { + if ( in_array( $option, $this->get_option_changes_to_log(), true ) ) { + Monitor::instance()->log( + [ + 'action' => 'updated_option', + 'summary' => 'Option `' . $option . '` is updated', + ], + 'options' + ); + } + } + + /** + * Option is added + * + * @param string $option Option name. + */ + public function added_option( $option ) { + if ( in_array( $option, $this->get_option_changes_to_log(), true ) ) { + Monitor::instance()->log( + [ + 'action' => 'added_option', + 'summary' => 'Option `' . $option . '` is added', + ], + 'options' + ); + } + } +} diff --git a/includes/classes/SupportMonitor/Debug.php b/includes/classes/SupportMonitor/Debug.php index b3c73ec..dfb65b2 100644 --- a/includes/classes/SupportMonitor/Debug.php +++ b/includes/classes/SupportMonitor/Debug.php @@ -14,7 +14,9 @@ /** * Gutenberg class */ -class Debug extends Singleton { +class Debug { + + use Singleton; /** * Setup module diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index 35fb200..a3c5127 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -14,7 +14,10 @@ /** * Monitor class */ -class Monitor extends Singleton { +class Monitor { + + use Singleton; + /** * Setup module * @@ -337,7 +340,7 @@ public function api_server_field() { /** - * Sends a message async one time + * Format a message to send * * @param array $data Arbitrary data * @param string $type Message type. Can be notice, warning, or error. @@ -388,6 +391,54 @@ public function send_message( $data, $type = 'notice', $group = 'message' ) { return true; } + /** + * Check if loggin is enabled + * + * @return boolean + */ + public function logging_enabled() { + return ( ! defined( 'TENUP_DISABLE_ACTIVITYLOG' ) || ! TENUP_DISABLE_ACTIVITYLOG ); + } + + /** + * Create a log entry + * + * @param array $data Data related to the action.. + * @param string $subgroup Sub group + */ + public function log( $data = [], $subgroup = null ) { + if ( ! $this->logging_enabled() ) { + return; + } + + /** + * Filters whether to log the message. + * + * @param string $data Data related to the action. + * @param string $subgroup Sub group. + */ + if ( ! apply_filters( 'tenup_support_monitor_log_item', $data, $subgroup ) ) { + return; + } + + $current_logs = get_option( 'tenup_support_monitor_activity_logs', [] ); + + if ( apply_filters( 'tenup_support_monitor_max_activity_log_count', 500 ) <= count( $current_logs ) ) { + return; + } + + $log_item = [ + 'date' => time(), + 'summary' => $data['summary'], + 'subgroup' => $subgroup, + 'user_id' => get_current_user_id(), + ]; + + $current_logs[] = $log_item; + + update_option( 'tenup_support_monitor_activity_logs', $current_logs, false ); + } + /** * Setup daily report cron * @@ -483,6 +534,20 @@ public function send_daily_report() { ); } + if ( $this->logging_enabled() ) { + $logs = get_option( 'tenup_support_monitor_activity_logs', [] ); + + if ( ! empty( $logs ) ) { + $messages[] = $this->format_message( + $logs, + 'log', + 'activity' + ); + + update_option( 'tenup_support_monitor_activity_logs', [], false ); + } + } + $this->send_request( $messages ); } diff --git a/package-lock.json b/package-lock.json index bbd811d..acbfc81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2223,6 +2223,12 @@ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, + "@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, "@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", @@ -2235,6 +2241,18 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -2901,12 +2919,6 @@ "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "agent-base": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", @@ -3267,12 +3279,6 @@ } } }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -3351,10 +3357,13 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } }, "async-chain-proxy": { "version": "0.1.6", @@ -3375,7 +3384,7 @@ "async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", "dev": true }, "async-limiter": { @@ -3451,21 +3460,12 @@ "dev": true }, "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } + "follow-redirects": "^1.14.0" } }, "axobject-query": { @@ -3564,12 +3564,6 @@ } } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, "backstopjs": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-4.4.2.tgz", @@ -3692,12 +3686,6 @@ } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -3705,15 +3693,15 @@ "dev": true }, "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "bcrypt-pbkdf": { @@ -3725,15 +3713,6 @@ "tweetnacl": "^0.14.3" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -4042,12 +4021,6 @@ "safe-buffer": "^5.1.1" } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -4159,30 +4132,30 @@ "dev": true }, "browser-sync": { - "version": "2.26.7", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.7.tgz", - "integrity": "sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w==", + "version": "2.27.10", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.10.tgz", + "integrity": "sha512-xKm+6KJmJu6RuMWWbFkKwOCSqQOxYe3nOrFkKI5Tr/ZzjPxyU3pFShKK3tWnazBo/3lYQzN7fzjixG8fwJh1Xw==", "dev": true, "requires": { - "browser-sync-client": "^2.26.6", - "browser-sync-ui": "^2.26.4", + "browser-sync-client": "^2.27.10", + "browser-sync-ui": "^2.27.10", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", - "chokidar": "^2.0.4", + "chokidar": "^3.5.1", "connect": "3.6.6", "connect-history-api-fallback": "^1", "dev-ip": "^1.0.1", "easy-extender": "^2.3.4", - "eazy-logger": "^3", + "eazy-logger": "3.1.0", "etag": "^1.8.1", "fresh": "^0.5.2", "fs-extra": "3.0.1", - "http-proxy": "1.15.2", + "http-proxy": "^1.18.1", "immutable": "^3", - "localtunnel": "1.9.2", - "micromatch": "^3.1.10", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", "opn": "5.3.0", - "portscanner": "2.1.1", + "portscanner": "2.2.0", "qs": "6.2.3", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", @@ -4191,11 +4164,52 @@ "serve-index": "1.9.1", "serve-static": "1.13.2", "server-destroy": "1.0.1", - "socket.io": "2.1.1", - "ua-parser-js": "0.7.17", - "yargs": "6.4.0" + "socket.io": "^4.4.1", + "ua-parser-js": "1.0.2", + "yargs": "^17.3.1" }, "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4205,10 +4219,19 @@ "ms": "2.0.0" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4216,10 +4239,26 @@ "universalify": "^0.1.0" } }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { "depd": "~1.1.2", @@ -4231,18 +4270,51 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -4252,7 +4324,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "opn": { @@ -4267,9 +4339,18 @@ "qs": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "integrity": "sha512-AY4g8t3LMboim0t6XWFdz6J5OuJ1ZNYu54SXihS/OMpgyCqYmcAJnWqkNSOjSjWmq3xxy+GF9uWQI2lI/7tKIA==", "dev": true }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -4314,32 +4395,42 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } } } }, "browser-sync-client": { - "version": "2.26.6", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.6.tgz", - "integrity": "sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw==", + "version": "2.27.10", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.10.tgz", + "integrity": "sha512-KCFKA1YDj6cNul0VsA28apohtBsdk5Wv8T82ClOZPZMZWxPj4Ny5AUbrj9UlAb/k6pdxE5HABrWDhP9+cjt4HQ==", "dev": true, "requires": { "etag": "1.8.1", "fresh": "0.5.2", "mitt": "^1.1.3", - "rxjs": "^5.5.6" + "rxjs": "^5.5.6", + "typescript": "^4.6.2" } }, "browser-sync-ui": { - "version": "2.26.4", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", - "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", + "version": "2.27.10", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.10.tgz", + "integrity": "sha512-elbJILq4Uo6OQv6gsvS3Y9vRAJlWu+h8j0JDkF0X/ua+3S6SVbbiWnZc8sNOFlG7yvVGIwBED3eaYQ0iBo1Dtw==", "dev": true, "requires": { "async-each-series": "0.1.1", "connect-history-api-fallback": "^1", "immutable": "^3", "server-destroy": "1.0.1", - "socket.io-client": "^2.0.4", + "socket.io-client": "^4.4.1", "stream-throttle": "^0.1.3" } }, @@ -4445,13 +4536,13 @@ "bs-recipes": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", "dev": true }, "bs-snippet-injector": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", - "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", + "integrity": "sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw==", "dev": true }, "buffer": { @@ -4661,24 +4752,12 @@ "caller-callsite": "^2.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, "camelcase-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", @@ -4969,14 +5048,54 @@ "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "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 + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "clone-regexp": { @@ -5090,24 +5209,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5145,7 +5252,7 @@ "connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", "dev": true, "requires": { "debug": "2.6.9", @@ -5166,7 +5273,7 @@ "finalhandler": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", "dev": true, "requires": { "debug": "2.6.9", @@ -5181,13 +5288,13 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", "dev": true } } @@ -5356,6 +5463,16 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -6086,7 +6203,7 @@ "dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", "dev": true }, "diff": { @@ -6144,6 +6261,12 @@ "super-simple-web-server": "^1.0.0" } }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -6293,12 +6416,12 @@ } }, "eazy-logger": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", - "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", + "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", "dev": true, "requires": { - "tfunk": "^3.0.1" + "tfunk": "^4.0.0" } }, "ecc-jsbn": { @@ -6372,97 +6495,81 @@ } }, "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "dev": true, "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" }, "dependencies": { "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true } } }, "engine.io-client": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", - "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.2.tgz", + "integrity": "sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ==", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0" }, "dependencies": { - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "ms": "2.1.2" } + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true } } }, "engine.io-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", - "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "dev": true }, "enhanced-resolve": { "version": "4.1.1", @@ -6563,6 +6670,12 @@ } } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -7298,9 +7411,9 @@ "dev": true }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { @@ -7950,30 +8063,10 @@ } }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true }, "for-in": { "version": "1.0.2", @@ -8684,9 +8777,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-own-enumerable-property-symbols": { @@ -8952,29 +9045,6 @@ "ansi-regex": "^2.0.0" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -9170,13 +9240,14 @@ } }, "http-proxy": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", - "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "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, "requires": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-signature": { @@ -9549,7 +9620,7 @@ "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", "dev": true }, "import-cwd": { @@ -9614,12 +9685,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -9871,12 +9936,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, "ip-regex": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", @@ -10564,15 +10623,6 @@ "integrity": "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==", "dev": true }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -10634,9 +10684,9 @@ } }, "limiter": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", - "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, "lines-and-columns": { @@ -11193,36 +11243,77 @@ } }, "localtunnel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.2.tgz", - "integrity": "sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", "dev": true, "requires": { - "axios": "0.19.0", - "debug": "4.1.1", + "axios": "0.21.4", + "debug": "4.3.2", "openurl": "1.1.1", - "yargs": "6.6.0" + "yargs": "17.1.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "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 + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -11252,7 +11343,7 @@ "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", "dev": true }, "lodash.map": { @@ -12068,9 +12159,9 @@ } }, "mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "dev": true }, "mixin-deep": { @@ -12383,12 +12474,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -12438,12 +12523,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-path": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -12674,7 +12753,7 @@ "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==", "dev": true }, "opn": { @@ -12732,15 +12811,6 @@ "arch": "^2.1.0" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -12956,24 +13026,6 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13289,12 +13341,12 @@ } }, "portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", "dev": true, "requires": { - "async": "1.5.2", + "async": "^2.6.0", "is-number-like": "^1.0.3" } }, @@ -15394,12 +15446,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "requireindex": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", @@ -15409,7 +15455,7 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { @@ -15481,7 +15527,7 @@ "resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", "dev": true, "requires": { "debug": "^2.2.0", @@ -15500,7 +15546,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } @@ -15600,7 +15646,7 @@ "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==", "dev": true }, "rxjs": { @@ -15762,7 +15808,7 @@ "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -15786,7 +15832,7 @@ "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { "depd": "~1.1.2", @@ -15798,13 +15844,13 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "setprototypeof": { @@ -15830,7 +15876,7 @@ "server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", "dev": true }, "set-blocking": { @@ -16137,166 +16183,77 @@ } }, "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.2.tgz", + "integrity": "sha512-6fCnk4ARMPZN448+SQcnn1u8OHUC72puJcNtSgg2xS34Cu7br1gQ09YKkO1PFfDn/wyUE9ZgMAwosJed003+NQ==", "dev": true, "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.2.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" + "ms": "2.1.2" } } } }, "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", "dev": true }, "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.2.tgz", + "integrity": "sha512-naqYfFu7CLDiQ1B7AlLhRXKX3gdeaIMfgigwavDzgJoIUYulc1qHH5+2XflTsXTPY7BlPH5rppJyUjhjrKQKLg==", + "dev": true, + "requires": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.2.1", + "socket.io-parser": "~4.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } } }, "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", + "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -16344,9 +16301,9 @@ } }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -16582,7 +16539,7 @@ "stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", "dev": true, "requires": { "commander": "^2.2.0", @@ -17515,7 +17472,7 @@ "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", "dev": true }, "table": { @@ -17671,9 +17628,9 @@ } }, "terser": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", - "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -17727,25 +17684,25 @@ "dev": true }, "tfunk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", - "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", + "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", "dev": true, "requires": { - "chalk": "^1.1.1", - "object-path": "^0.9.0" + "chalk": "^1.1.3", + "dlv": "^1.1.3" }, "dependencies": { "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -17758,7 +17715,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true } } @@ -17815,12 +17772,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -18005,10 +17956,16 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + }, "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", "dev": true }, "ultron": { @@ -18848,18 +18805,6 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -18876,13 +18821,78 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "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 + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "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 + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "wrappy": { @@ -18952,9 +18962,9 @@ "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", "dev": true }, "xregexp": { @@ -18973,9 +18983,9 @@ "dev": true }, "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -18985,35 +18995,82 @@ "dev": true }, "yargs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", - "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.1.0" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "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 + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true }, "yauzl": { "version": "2.4.1", @@ -19023,12 +19080,6 @@ "requires": { "fd-slicer": "~1.0.1" } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true } } } diff --git a/package.json b/package.json old mode 100755 new mode 100644 index 10f41d0..5dc5a27 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "babel-eslint": "^10.0.3", "babel-loader": "^8.0.6", "backstopjs": "^4.4", - "browser-sync": "^2.26.7", + "browser-sync": "^2.27.10", "browser-sync-webpack-plugin": "^2.2.2", "browserslist": "^4.8.2", "caniuse-db": "^1.0.30001016", @@ -88,7 +88,7 @@ "stylelint-declaration-use-variable": "^1.7.2", "stylelint-order": "^2.2.1", "stylelint-webpack-plugin": "^1.1.2", - "terser": "^4.4.3", + "terser": "^4.8.1", "webpack": "^4.41.4", "webpack-cli": "^3.3.10", "webpack-fix-style-only-entries": "^0.4.0", diff --git a/vendor/yahnis-elsts/plugin-update-checker/.gitignore b/vendor/yahnis-elsts/plugin-update-checker/.gitignore new file mode 100644 index 0000000..7126070 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/.gitignore @@ -0,0 +1,40 @@ +# Created by .ignore support plugin (hsz.mobi) +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# The entire IDEA/PhpStorm directory +.idea/ + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4/Factory.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4/Factory.php index 71f2de4..00001d9 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4/Factory.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4/Factory.php @@ -1,6 +1,6 @@ rootDir = dirname(__FILE__) . '/'; + + if ( version_compare(PHP_VERSION, '5.3', '>=') && __NAMESPACE__ ) { + $namespaceWithSlash = __NAMESPACE__ . '\\'; + } else { + $namespaceWithSlash = ''; + } + + $nameParts = explode('_', substr(__CLASS__, strlen($namespaceWithSlash)), 3); + $this->prefix = $namespaceWithSlash . $nameParts[0] . '_' . $nameParts[1] . '_'; + + $this->libraryDir = $this->rootDir . '../..'; + if ( !self::isPhar() ) { + $this->libraryDir = realpath($this->libraryDir); + } + $this->libraryDir = $this->libraryDir . '/'; + + $this->staticMap = array( + $namespaceWithSlash . 'PucReadmeParser' => 'vendor/PucReadmeParser.php', + $namespaceWithSlash . 'Parsedown' => 'vendor/Parsedown.php', + $namespaceWithSlash . 'Puc_v4_Factory' => 'Puc/v4/Factory.php', + ); + + spl_autoload_register(array($this, 'autoload')); + } + + /** + * Determine if this file is running as part of a Phar archive. + * + * @return bool + */ + private static function isPhar() { + //Check if the current file path starts with "phar://". + static $pharProtocol = 'phar://'; + return (substr(__FILE__, 0, strlen($pharProtocol)) === $pharProtocol); + } + + public function autoload($className) { + if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) { + /** @noinspection PhpIncludeInspection */ + include ($this->libraryDir . $this->staticMap[$className]); + return; + } + + if (strpos($className, $this->prefix) === 0) { + $path = substr($className, strlen($this->prefix)); + $path = str_replace('_', '/', $path); + $path = $this->rootDir . $path . '.php'; + + if (file_exists($path)) { + /** @noinspection PhpIncludeInspection */ + include $path; + } + } + } + } + +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/Extension.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/Extension.php similarity index 83% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/Extension.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/Extension.php index b6d84be..4619c0f 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/Extension.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/Extension.php @@ -1,12 +1,12 @@ updateChecker = $updateChecker; @@ -14,6 +14,10 @@ public function __construct($updateChecker, $panelClass = null) { $this->panelClass = $panelClass; } + if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($this->panelClass, '\\') === false) ) { + $this->panelClass = __NAMESPACE__ . '\\' . $this->panelClass; + } + add_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); @@ -48,7 +52,7 @@ public function enqueuePanelDependencies() { 'puc-debug-bar-js-v4', $this->getLibraryUrl("/js/debug-bar.js"), array('jquery'), - '20170516' + '20201209' ); } @@ -142,6 +146,15 @@ protected function preAjaxRequest() { @ini_set('display_errors', 'On'); } + /** + * Remove hooks that were added by this extension. + */ + public function removeHooks() { + remove_filter('debug_bar_panels', array($this, 'addDebugBarPanel')); + remove_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies')); + remove_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow')); + } + /** * @param string $filePath * @return string @@ -150,11 +163,11 @@ private function getLibraryUrl($filePath) { $absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/')); //Where is the library located inside the WordPress directory structure? - $absolutePath = Puc_v4p8_Factory::normalizePath($absolutePath); + $absolutePath = Puc_v4p13_Factory::normalizePath($absolutePath); - $pluginDir = Puc_v4p8_Factory::normalizePath(WP_PLUGIN_DIR); - $muPluginDir = Puc_v4p8_Factory::normalizePath(WPMU_PLUGIN_DIR); - $themeDir = Puc_v4p8_Factory::normalizePath(get_theme_root()); + $pluginDir = Puc_v4p13_Factory::normalizePath(WP_PLUGIN_DIR); + $muPluginDir = Puc_v4p13_Factory::normalizePath(WPMU_PLUGIN_DIR); + $themeDir = Puc_v4p13_Factory::normalizePath(get_theme_root()); if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) { //It's part of a plugin. diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/Panel.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/Panel.php similarity index 96% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/Panel.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/Panel.php index 4082bd4..6abcfa6 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/Panel.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/Panel.php @@ -1,9 +1,9 @@ '; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/PluginExtension.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/PluginExtension.php similarity index 72% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/PluginExtension.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/PluginExtension.php index 2c125f6..2514a04 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/DebugBar/PluginExtension.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/DebugBar/PluginExtension.php @@ -1,12 +1,12 @@ '', + 'slug' => '', + 'checkPeriod' => 12, + 'optionName' => '', + 'muPluginFile' => '', + ); + $args = array_merge($defaults, array_intersect_key($args, $defaults)); + extract($args, EXTR_SKIP); + + //Check for the service URI + if ( empty($metadataUrl) ) { + $metadataUrl = self::getServiceURI($fullPath); + } + + /** @noinspection PhpUndefinedVariableInspection These variables are created by extract(), above. */ + return self::buildUpdateChecker($metadataUrl, $fullPath, $slug, $checkPeriod, $optionName, $muPluginFile); + } + /** * Create a new instance of the update checker. * * This method automatically detects if you're using it for a plugin or a theme and chooses * the appropriate implementation for your update source (JSON file, GitHub, BitBucket, etc). * - * @see Puc_v4p8_UpdateChecker::__construct + * @see Puc_v4p13_UpdateChecker::__construct * * @param string $metadataUrl The URL of the metadata file, a GitHub repository, or another supported update source. * @param string $fullPath Full path to the main plugin file or to the theme directory. @@ -32,7 +62,7 @@ class Puc_v4p8_Factory { * @param int $checkPeriod How often to check for updates (in hours). * @param string $optionName Where to store book-keeping info about update checks. * @param string $muPluginFile The plugin filename relative to the mu-plugins directory. - * @return Puc_v4p8_Plugin_UpdateChecker|Puc_v4p8_Theme_UpdateChecker|Puc_v4p8_Vcs_BaseChecker + * @return Puc_v4p13_Plugin_UpdateChecker|Puc_v4p13_Theme_UpdateChecker|Puc_v4p13_Vcs_BaseChecker */ public static function buildUpdateChecker($metadataUrl, $fullPath, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = '') { $fullPath = self::normalizePath($fullPath); @@ -81,6 +111,11 @@ public static function buildUpdateChecker($metadataUrl, $fullPath, $slug = '', $ return null; } + //Add the current namespace to the class name(s). + if ( version_compare(PHP_VERSION, '5.3', '>=') ) { + $checkerClass = __NAMESPACE__ . '\\' . $checkerClass; + } + if ( !isset($apiClass) ) { //Plain old update checker. return new $checkerClass($metadataUrl, $id, $slug, $checkPeriod, $optionName, $muPluginFile); @@ -96,6 +131,10 @@ public static function buildUpdateChecker($metadataUrl, $fullPath, $slug = '', $ return null; } + if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($apiClass, '\\') === false) ) { + $apiClass = __NAMESPACE__ . '\\' . $apiClass; + } + return new $checkerClass( new $apiClass($metadataUrl), $id, @@ -178,6 +217,35 @@ protected static function getThemeDirectoryName($absolutePath) { return null; } + /** + * Get the service URI from the file header. + * + * @param string $fullPath + * @return string + */ + private static function getServiceURI($fullPath) { + //Look for the URI + if ( is_readable($fullPath) ) { + $seek = array( + 'github' => 'GitHub URI', + 'gitlab' => 'GitLab URI', + 'bucket' => 'BitBucket URI', + ); + $seek = apply_filters('puc_get_source_uri', $seek); + $data = get_file_data($fullPath, $seek); + foreach ($data as $key => $uri) { + if ( $uri ) { + return $uri; + } + } + } + + //URI was not found so throw an error. + throw new RuntimeException( + sprintf('Unable to locate URI in header of "%s"', htmlentities($fullPath)) + ); + } + /** * Get the name of the hosting service that the URL points to. * @@ -269,7 +337,11 @@ protected static function compareVersions($a, $b) { */ public static function addVersion($generalClass, $versionedClass, $version) { if ( empty(self::$myMajorVersion) ) { - $nameParts = explode('_', __CLASS__, 3); + $className = (version_compare(PHP_VERSION, '5.3', '>=') && __NAMESPACE__) + ? substr(__CLASS__, strlen(__NAMESPACE__) + 1) + : __CLASS__; + + $nameParts = explode('_', $className, 3); self::$myMajorVersion = substr(ltrim($nameParts[1], 'v'), 0, 1); } @@ -294,4 +366,4 @@ public static function addVersion($generalClass, $versionedClass, $version) { } } -endif; \ No newline at end of file +endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/InstalledPackage.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/InstalledPackage.php similarity index 95% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/InstalledPackage.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/InstalledPackage.php index abb0d9c..5369d42 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/InstalledPackage.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/InstalledPackage.php @@ -1,5 +1,5 @@ $field) ) { diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Package.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Package.php similarity index 94% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Package.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Package.php index d35e13a..67b6e47 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Package.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Package.php @@ -1,9 +1,9 @@ pluginAbsolutePath); //If realpath() fails, just normalize the syntax instead. if (($muPluginDir === false) || ($pluginPath === false)) { - $muPluginDir = Puc_v4p8_Factory::normalizePath(WPMU_PLUGIN_DIR); - $pluginPath = Puc_v4p8_Factory::normalizePath($this->pluginAbsolutePath); + $muPluginDir = Puc_v4p13_Factory::normalizePath(WPMU_PLUGIN_DIR); + $pluginPath = Puc_v4p13_Factory::normalizePath($this->pluginAbsolutePath); } $cachedResult = (strpos($pluginPath, $muPluginDir) === 0); diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Ui.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Ui.php similarity index 95% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Ui.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Ui.php index b4748e0..b3ea175 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Ui.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Ui.php @@ -1,14 +1,14 @@ updateChecker = $updateChecker; @@ -156,8 +156,9 @@ public function handleManualCheck() { if ( $shouldCheck ) { $update = $this->updateChecker->checkForUpdates(); $status = ($update === null) ? 'no_update' : 'update_available'; + $lastRequestApiErrors = $this->updateChecker->getLastRequestApiErrors(); - if ( ($update === null) && !empty($this->lastRequestApiErrors) ) { + if ( ($update === null) && !empty($lastRequestApiErrors) ) { //Some errors are not critical. For example, if PUC tries to retrieve the readme.txt //file from GitHub and gets a 404, that's an API error, but it doesn't prevent updates //from working. Maybe the plugin simply doesn't have a readme. @@ -169,7 +170,7 @@ public function handleManualCheck() { 'puc-bitbucket-http-error', ); - foreach ($this->lastRequestApiErrors as $item) { + foreach ($lastRequestApiErrors as $item) { $wpError = $item['error']; /** @var WP_Error $wpError */ if ( !in_array($wpError->get_error_code(), $questionableErrorCodes) ) { @@ -180,7 +181,7 @@ public function handleManualCheck() { if ( $foundCriticalErrors ) { $status = 'error'; - set_site_transient($this->manualCheckErrorTransient, $this->lastRequestApiErrors, 60); + set_site_transient($this->manualCheckErrorTransient, $lastRequestApiErrors, 60); } } diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Update.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Update.php similarity index 81% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Update.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Update.php index a4459b3..9b3c5a0 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/Update.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/Update.php @@ -1,5 +1,5 @@ id = $this->id; $update->url = $this->homepage; $update->tested = $this->tested; + $update->requires_php = $this->requires_php; $update->plugin = $this->filename; if ( !empty($this->upgrade_notice) ) { diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/UpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/UpdateChecker.php similarity index 89% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/UpdateChecker.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/UpdateChecker.php index 49d01ef..0b24452 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Plugin/UpdateChecker.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Plugin/UpdateChecker.php @@ -1,5 +1,5 @@ pluginFile), $slug, $checkPeriod, $optionName); + //Backwards compatibility: If the plugin is a mu-plugin but no $muPluginFile is specified, assume //it's the same as $pluginFile given that it's not in a subdirectory (WP only looks in the base dir). if ( (strpbrk($this->pluginFile, '/\\') === false) && $this->isUnknownMuPlugin() ) { @@ -66,19 +68,17 @@ public function __construct($metadataUrl, $pluginFile, $slug = '', $checkPeriod //Details: https://github.com/YahnisElsts/plugin-update-checker/issues/138#issuecomment-335590964 add_action('uninstall_' . $this->pluginFile, array($this, 'removeHooks')); - parent::__construct($metadataUrl, dirname($this->pluginFile), $slug, $checkPeriod, $optionName); - - $this->extraUi = new Puc_v4p8_Plugin_Ui($this); + $this->extraUi = new Puc_v4p13_Plugin_Ui($this); } /** * Create an instance of the scheduler. * * @param int $checkPeriod - * @return Puc_v4p8_Scheduler + * @return Puc_v4p13_Scheduler */ protected function createScheduler($checkPeriod) { - $scheduler = new Puc_v4p8_Scheduler($this, $checkPeriod, array('load-plugins.php')); + $scheduler = new Puc_v4p13_Scheduler($this, $checkPeriod, array('load-plugins.php')); register_deactivation_hook($this->pluginFile, array($scheduler, 'removeUpdaterCron')); return $scheduler; } @@ -124,13 +124,13 @@ public function removeHooks() { * @uses wp_remote_get() * * @param array $queryArgs Additional query arguments to append to the request. Optional. - * @return Puc_v4p8_Plugin_Info + * @return Puc_v4p13_Plugin_Info */ public function requestInfo($queryArgs = array()) { - list($pluginInfo, $result) = $this->requestMetadata('Puc_v4p8_Plugin_Info', 'request_info', $queryArgs); + list($pluginInfo, $result) = $this->requestMetadata('Puc_v4p13_Plugin_Info', 'request_info', $queryArgs); if ( $pluginInfo !== null ) { - /** @var Puc_v4p8_Plugin_Info $pluginInfo */ + /** @var Puc_v4p13_Plugin_Info $pluginInfo */ $pluginInfo->filename = $this->pluginFile; $pluginInfo->slug = $this->slug; } @@ -144,7 +144,7 @@ public function requestInfo($queryArgs = array()) { * * @uses PluginUpdateChecker::requestInfo() * - * @return Puc_v4p8_Update|null An instance of Plugin_Update, or NULL when no updates are available. + * @return Puc_v4p13_Update|null An instance of Plugin_Update, or NULL when no updates are available. */ public function requestUpdate() { //For the sake of simplicity, this function just calls requestInfo() @@ -153,7 +153,7 @@ public function requestUpdate() { if ( $pluginInfo === null ){ return null; } - $update = Puc_v4p8_Plugin_Update::fromPluginInfo($pluginInfo); + $update = Puc_v4p13_Plugin_Update::fromPluginInfo($pluginInfo); $update = $this->filterUpdateResult($update); @@ -235,6 +235,22 @@ protected function getUpdateListKey() { return $this->pluginFile; } + protected function getNoUpdateItemFields() { + return array_merge( + parent::getNoUpdateItemFields(), + array( + 'id' => $this->pluginFile, + 'slug' => $this->slug, + 'plugin' => $this->pluginFile, + 'icons' => array(), + 'banners' => array(), + 'banners_rtl' => array(), + 'tested' => '', + 'compatibility' => new stdClass(), + ) + ); + } + /** * Alias for isBeingUpgraded(). * @@ -265,12 +281,12 @@ public function isBeingUpgraded($upgrader = null) { * Uses cached update data. To retrieve update information straight from * the metadata URL, call requestUpdate() instead. * - * @return Puc_v4p8_Plugin_Update|null + * @return Puc_v4p13_Plugin_Update|null */ public function getUpdate() { $update = parent::getUpdate(); if ( isset($update) ) { - /** @var Puc_v4p8_Plugin_Update $update */ + /** @var Puc_v4p13_Plugin_Update $update */ $update->filename = $this->pluginFile; } return $update; @@ -375,20 +391,20 @@ public function addResultFilter($callback) { } protected function createDebugBarExtension() { - return new Puc_v4p8_DebugBar_PluginExtension($this); + return new Puc_v4p13_DebugBar_PluginExtension($this); } /** * Create a package instance that represents this plugin or theme. * - * @return Puc_v4p8_InstalledPackage + * @return Puc_v4p13_InstalledPackage */ protected function createInstalledPackage() { - return new Puc_v4p8_Plugin_Package($this->pluginAbsolutePath, $this); + return new Puc_v4p13_Plugin_Package($this->pluginAbsolutePath, $this); } /** - * @return Puc_v4p8_Plugin_Package + * @return Puc_v4p13_Plugin_Package */ public function getInstalledPackage() { return $this->package; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Scheduler.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Scheduler.php similarity index 79% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Scheduler.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Scheduler.php index 246a22f..cca04d7 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Scheduler.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Scheduler.php @@ -1,11 +1,11 @@ cronHook) && !defined('WP_INSTALLING') ) { - wp_schedule_event(time(), $scheduleName, $this->cronHook); + //Randomly offset the schedule to help prevent update server traffic spikes. Without this + //most checks may happen during times of day when people are most likely to install new plugins. + $firstCheckTime = time() - rand(0, max($this->checkPeriod * 3600 - 15 * 60, 1)); + $firstCheckTime = apply_filters( + $this->updateChecker->getUniqueName('first_check_time'), + $firstCheckTime + ); + wp_schedule_event($firstCheckTime, $scheduleName, $this->cronHook); } add_action($this->cronHook, array($this, 'maybeCheckForUpdates')); @@ -80,6 +87,7 @@ public function __construct($updateChecker, $checkPeriod, $hourlyHooks = array(' * Runs upon the WP action upgrader_process_complete. * * We look at the parameters to decide whether to call maybeCheckForUpdates() or not. + * We also check if the update checker has been removed by the update. * * @param WP_Upgrader $upgrader WP_Upgrader instance * @param array $upgradeInfo extra information about the upgrade @@ -88,6 +96,15 @@ public function upgraderProcessComplete( /** @noinspection PhpUnusedParameterInspection */ $upgrader, $upgradeInfo ) { + //Cancel all further actions if the current version of PUC has been deleted or overwritten + //by a different version during the upgrade. If we try to do anything more in that situation, + //we could trigger a fatal error by trying to autoload a deleted class. + clearstatcache(); + if ( !file_exists(__FILE__) ) { + $this->removeHooks(); + $this->updateChecker->removeHooks(); + return; + } //Sanity check and limitation to relevant types. if ( @@ -99,7 +116,7 @@ public function upgraderProcessComplete( //Filter out notifications of upgrades that should have no bearing upon whether or not our //current info is up-to-date. - if ( is_a($this->updateChecker, 'Puc_v4p8_Theme_UpdateChecker') ) { + if ( is_a($this->updateChecker, 'Puc_v4p13_Theme_UpdateChecker') ) { if ( 'theme' !== $upgradeInfo['type'] || !isset($upgradeInfo['themes']) ) { return; } @@ -113,7 +130,7 @@ public function upgraderProcessComplete( } } - if ( is_a($this->updateChecker, 'Puc_v4p8_Plugin_UpdateChecker') ) { + if ( is_a($this->updateChecker, 'Puc_v4p13_Plugin_UpdateChecker') ) { if ( 'plugin' !== $upgradeInfo['type'] || !isset($upgradeInfo['plugins']) ) { return; } @@ -129,7 +146,7 @@ public function upgraderProcessComplete( $this->maybeCheckForUpdates(); } - + /** * Check for updates if the configured check interval has already elapsed. * Will use a shorter check interval on certain admin pages like "Dashboard -> Updates" or when doing cron. @@ -226,6 +243,24 @@ public function removeUpdaterCron() { public function getCronHookName() { return $this->cronHook; } + + /** + * Remove most hooks added by the scheduler. + */ + public function removeHooks() { + remove_filter('cron_schedules', array($this, '_addCustomSchedule')); + remove_action('admin_init', array($this, 'maybeCheckForUpdates')); + remove_action('load-update-core.php', array($this, 'maybeCheckForUpdates')); + + if ( $this->cronHook !== null ) { + remove_action($this->cronHook, array($this, 'maybeCheckForUpdates')); + } + if ( !empty($this->hourlyCheckHooks) ) { + foreach ($this->hourlyCheckHooks as $hook) { + remove_action($hook, array($this, 'maybeCheckForUpdates')); + } + } + } } endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/StateStore.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/StateStore.php similarity index 79% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/StateStore.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/StateStore.php index aa2d38b..8eb381d 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/StateStore.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/StateStore.php @@ -1,8 +1,8 @@ lazyLoad(); @@ -73,10 +73,10 @@ public function getUpdate() { } /** - * @param Puc_v4p8_Update|null $update + * @param Puc_v4p13_Update|null $update * @return $this */ - public function setUpdate(Puc_v4p8_Update $update = null) { + public function setUpdate(Puc_v4p13_Update $update = null) { $this->lazyLoad(); $this->update = $update; return $this; @@ -138,7 +138,7 @@ public function save() { $updateClass = get_class($this->update); $state->updateClass = $updateClass; $prefix = $this->getLibPrefix(); - if ( Puc_v4p8_Utils::startsWith($updateClass, $prefix) ) { + if ( Puc_v4p13_Utils::startsWith($updateClass, $prefix) ) { $state->updateBaseClass = substr($updateClass, strlen($prefix)); } } @@ -169,8 +169,8 @@ protected function load() { return; } - $this->lastCheck = intval(Puc_v4p8_Utils::get($state, 'lastCheck', 0)); - $this->checkedVersion = Puc_v4p8_Utils::get($state, 'checkedVersion', ''); + $this->lastCheck = intval(Puc_v4p13_Utils::get($state, 'lastCheck', 0)); + $this->checkedVersion = Puc_v4p13_Utils::get($state, 'checkedVersion', ''); $this->update = null; if ( isset($state->update) ) { @@ -180,11 +180,11 @@ protected function load() { $updateClass = null; if ( isset($state->updateBaseClass) ) { $updateClass = $this->getLibPrefix() . $state->updateBaseClass; - } else if ( isset($state->updateClass) && class_exists($state->updateClass) ) { + } else if ( isset($state->updateClass) ) { $updateClass = $state->updateClass; } - if ( $updateClass !== null ) { + if ( ($updateClass !== null) && class_exists($updateClass) ) { $this->update = call_user_func(array($updateClass, 'fromObject'), $state->update); } } @@ -199,8 +199,17 @@ public function delete() { } private function getLibPrefix() { - $parts = explode('_', __CLASS__, 3); - return $parts[0] . '_' . $parts[1] . '_'; + $lastSlashPos = strrpos(__CLASS__, '\\'); + if ( $lastSlashPos !== false ) { + $namespacePrefix = substr(__CLASS__, 0, $lastSlashPos + 1); + $className = substr(__CLASS__, $lastSlashPos + 1); + } else { + $namespacePrefix = ''; + $className = __CLASS__; + } + + $parts = explode('_', $className, 3); + return $namespacePrefix . $parts[0] . '_' . $parts[1] . '_'; } } diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Theme/Package.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Theme/Package.php similarity index 92% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Theme/Package.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Theme/Package.php index bc0062e..f38cbfd 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Theme/Package.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Theme/Package.php @@ -1,7 +1,7 @@ requestMetadata('Puc_v4p8_Theme_Update', 'request_update'); + list($themeUpdate, $result) = $this->requestMetadata('Puc_v4p13_Theme_Update', 'request_update'); if ( $themeUpdate !== null ) { - /** @var Puc_v4p8_Theme_Update $themeUpdate */ + /** @var Puc_v4p13_Theme_Update $themeUpdate */ $themeUpdate->slug = $this->slug; } @@ -53,6 +53,16 @@ public function requestUpdate() { return $themeUpdate; } + protected function getNoUpdateItemFields() { + return array_merge( + parent::getNoUpdateItemFields(), + array( + 'theme' => $this->directoryName, + 'requires' => '', + ) + ); + } + public function userCanInstallUpdates() { return current_user_can('update_themes'); } @@ -61,10 +71,10 @@ public function userCanInstallUpdates() { * Create an instance of the scheduler. * * @param int $checkPeriod - * @return Puc_v4p8_Scheduler + * @return Puc_v4p13_Scheduler */ protected function createScheduler($checkPeriod) { - return new Puc_v4p8_Scheduler($this, $checkPeriod, array('load-themes.php')); + return new Puc_v4p13_Scheduler($this, $checkPeriod, array('load-themes.php')); } /** @@ -78,7 +88,7 @@ public function isBeingUpgraded($upgrader = null) { } protected function createDebugBarExtension() { - return new Puc_v4p8_DebugBar_Extension($this, 'Puc_v4p8_DebugBar_ThemePanel'); + return new Puc_v4p13_DebugBar_Extension($this, 'Puc_v4p13_DebugBar_ThemePanel'); } /** @@ -132,10 +142,10 @@ public function addResultFilter($callback) { /** * Create a package instance that represents this plugin or theme. * - * @return Puc_v4p8_InstalledPackage + * @return Puc_v4p13_InstalledPackage */ protected function createInstalledPackage() { - return new Puc_v4p8_Theme_Package($this->stylesheet, $this); + return new Puc_v4p13_Theme_Package($this->stylesheet, $this); } } diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Update.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Update.php similarity index 84% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Update.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Update.php index eb43359..62a5739 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Update.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Update.php @@ -1,5 +1,5 @@ debugMode = (bool)(constant('WP_DEBUG')); $this->metadataUrl = $metadataUrl; @@ -79,8 +89,8 @@ public function __construct($metadataUrl, $directoryName, $slug = null, $checkPe $this->package = $this->createInstalledPackage(); $this->scheduler = $this->createScheduler($checkPeriod); - $this->upgraderStatus = new Puc_v4p8_UpgraderStatus(); - $this->updateState = new Puc_v4p8_StateStore($this->optionName); + $this->upgraderStatus = new Puc_v4p13_UpgraderStatus(); + $this->updateState = new Puc_v4p13_StateStore($this->optionName); if ( did_action('init') ) { $this->loadTextDomain(); @@ -146,7 +156,7 @@ protected function installHooks() { /** * Remove hooks that were added by this update checker instance. */ - protected function removeHooks() { + public function removeHooks() { remove_filter('site_transient_' . $this->updateTransient, array($this,'injectUpdate')); remove_filter('site_transient_' . $this->updateTransient, array($this, 'injectTranslationUpdates')); remove_action( @@ -159,6 +169,14 @@ protected function removeHooks() { remove_action('plugins_loaded', array($this, 'maybeInitDebugBar')); remove_action('init', array($this, 'loadTextDomain')); + + if ( $this->scheduler ) { + $this->scheduler->removeHooks(); + } + + if ( $this->debugBarExtension ) { + $this->debugBarExtension->removeHooks(); + } } /** @@ -187,12 +205,11 @@ abstract public function userCanInstallUpdates(); * @return bool */ public function allowMetadataHost($allow, $host) { - static $metadataHost = 0; //Using 0 instead of NULL because parse_url can return NULL. - if ( $metadataHost === 0 ) { - $metadataHost = parse_url($this->metadataUrl, PHP_URL_HOST); + if ( $this->cachedMetadataHost === 0 ) { + $this->cachedMetadataHost = parse_url($this->metadataUrl, PHP_URL_HOST); } - if ( is_string($metadataHost) && (strtolower($host) === strtolower($metadataHost)) ) { + if ( is_string($this->cachedMetadataHost) && (strtolower($host) === strtolower($this->cachedMetadataHost)) ) { return true; } return $allow; @@ -201,12 +218,12 @@ public function allowMetadataHost($allow, $host) { /** * Create a package instance that represents this plugin or theme. * - * @return Puc_v4p8_InstalledPackage + * @return Puc_v4p13_InstalledPackage */ abstract protected function createInstalledPackage(); /** - * @return Puc_v4p8_InstalledPackage + * @return Puc_v4p13_InstalledPackage */ public function getInstalledPackage() { return $this->package; @@ -219,14 +236,14 @@ public function getInstalledPackage() { * and substitute their own scheduler. * * @param int $checkPeriod - * @return Puc_v4p8_Scheduler + * @return Puc_v4p13_Scheduler */ abstract protected function createScheduler($checkPeriod); /** * Check for updates. The results are stored in the DB option specified in $optionName. * - * @return Puc_v4p8_Update|null + * @return Puc_v4p13_Update|null */ public function checkForUpdates() { $installedVersion = $this->getInstalledVersion(); @@ -260,7 +277,7 @@ public function checkForUpdates() { /** * Load the update checker state from the DB. * - * @return Puc_v4p8_StateStore + * @return Puc_v4p13_StateStore */ public function getUpdateState() { return $this->updateState->lazyLoad(); @@ -285,7 +302,7 @@ public function resetUpdateState() { * Uses cached update data. To retrieve update information straight from * the metadata URL, call requestUpdate() instead. * - * @return Puc_v4p8_Update|null + * @return Puc_v4p13_Update|null */ public function getUpdate() { $update = $this->updateState->getUpdate(); @@ -306,16 +323,16 @@ public function getUpdate() { * * Subclasses should run the update through filterUpdateResult before returning it. * - * @return Puc_v4p8_Update An instance of Update, or NULL when no updates are available. + * @return Puc_v4p13_Update An instance of Update, or NULL when no updates are available. */ abstract public function requestUpdate(); /** * Filter the result of a requestUpdate() call. * - * @param Puc_v4p8_Update|null $update + * @param Puc_v4p13_Update|null $update * @param array|WP_Error|null $httpResult The value returned by wp_remote_get(), if any. - * @return Puc_v4p8_Update + * @return Puc_v4p13_Update */ protected function filterUpdateResult($update, $httpResult = null) { //Let plugins/themes modify the update. @@ -338,9 +355,9 @@ protected function filterUpdateResult($update, $httpResult = null) { * "Compatibility: Unknown". * The function mimics how wordpress.org API crafts the "tested" field out of "Tested up to". * - * @param Puc_v4p8_Metadata|null $update + * @param Puc_v4p13_Metadata|null $update */ - protected function fixSupportedWordpressVersion(Puc_v4p8_Metadata $update = null) { + protected function fixSupportedWordpressVersion(Puc_v4p13_Metadata $update = null) { if ( !isset($update->tested) || !preg_match('/^\d++\.\d++$/', $update->tested) ) { return; } @@ -349,26 +366,39 @@ protected function fixSupportedWordpressVersion(Puc_v4p8_Metadata $update = null $wpVersion = $GLOBALS['wp_version']; - if ( function_exists('get_preferred_from_update_core') ) { - $coreUpdate = get_preferred_from_update_core(); - if ( isset($coreUpdate->current) && version_compare($coreUpdate->current, $wpVersion, '>') ) { - $actualWpVersions[] = $coreUpdate->current; + if ( function_exists('get_core_updates') ) { + $coreUpdates = get_core_updates(); + if ( is_array($coreUpdates) ) { + foreach ($coreUpdates as $coreUpdate) { + if ( isset($coreUpdate->current) ) { + $actualWpVersions[] = $coreUpdate->current; + } + } } } $actualWpVersions[] = $wpVersion; - $actualWpPatchNumber = "999"; + $actualWpPatchNumber = null; foreach ($actualWpVersions as $version) { - if ( preg_match('/^(?P\d++\.\d++)\.(?P\d++)/', $version, $versionParts) ) { + if ( preg_match('/^(?P\d++\.\d++)(?:\.(?P\d++))?/', $version, $versionParts) ) { if ( $versionParts['majorMinor'] === $update->tested ) { - $actualWpPatchNumber = $versionParts['patch']; - break; + $patch = isset($versionParts['patch']) ? intval($versionParts['patch']) : 0; + if ( $actualWpPatchNumber === null ) { + $actualWpPatchNumber = $patch; + } else { + $actualWpPatchNumber = max($actualWpPatchNumber, $patch); + } } } } + if ( $actualWpPatchNumber === null ) { + $actualWpPatchNumber = 999; + } - $update->tested .= '.' . $actualWpPatchNumber; + if ( $actualWpPatchNumber > 0 ) { + $update->tested .= '.' . $actualWpPatchNumber; + } } /** @@ -503,6 +533,10 @@ public function injectUpdate($updates) { } else { //Clean up any stale update info. $updates = $this->removeUpdateFromList($updates); + //Add a placeholder item to the "no_update" list to enable auto-update support. + //If we don't do this, the option to enable automatic updates will only show up + //when an update is available. + $updates = $this->addNoUpdateItem($updates); } return $updates; @@ -534,6 +568,40 @@ protected function removeUpdateFromList($updates) { return $updates; } + /** + * See this post for more information: + * @link https://make.wordpress.org/core/2020/07/30/recommended-usage-of-the-updates-api-to-support-the-auto-updates-ui-for-plugins-and-themes-in-wordpress-5-5/ + * + * @param stdClass|null $updates + * @return stdClass + */ + protected function addNoUpdateItem($updates) { + if ( !is_object($updates) ) { + $updates = new stdClass(); + $updates->response = array(); + $updates->no_update = array(); + } else if ( !isset($updates->no_update) ) { + $updates->no_update = array(); + } + + $updates->no_update[$this->getUpdateListKey()] = (object) $this->getNoUpdateItemFields(); + + return $updates; + } + + /** + * Subclasses should override this method to add fields that are specific to plugins or themes. + * @return array + */ + protected function getNoUpdateItemFields() { + return array( + 'new_version' => $this->getInstalledVersion(), + 'url' => '', + 'package' => '', + 'requires_php' => '', + ); + } + /** * Get the key that will be used when adding updates to the update list that's maintained * by the WordPress core. The list is always an associative array, but the key is different @@ -570,7 +638,7 @@ protected function shouldShowUpdates() { * @param string $metaClass Parse the JSON as an instance of this class. It must have a static fromJson method. * @param string $filterRoot * @param array $queryArgs Additional query arguments. - * @return array [Puc_v4p8_Metadata|null, array|WP_Error] A metadata instance and the value returned by wp_remote_get(). + * @return array [Puc_v4p13_Metadata|null, array|WP_Error] A metadata instance and the value returned by wp_remote_get(). */ protected function requestMetadata($metaClass, $filterRoot, $queryArgs = array()) { //Query args to append to the URL. Plugins can add their own by using a filter callback (see addQueryArgFilter()). @@ -607,6 +675,9 @@ protected function requestMetadata($metaClass, $filterRoot, $queryArgs = array() $status = $this->validateApiResponse($result); $metadata = null; if ( !is_wp_error($status) ){ + if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($metaClass, '\\') === false) ) { + $metaClass = __NAMESPACE__ . '\\' . $metaClass; + } $metadata = call_user_func(array($metaClass, 'fromJson'), $result['body']); } else { do_action('puc_api_error', $status, $result, $url, $this->slug); @@ -904,18 +975,18 @@ protected function isBadDirectoryStructure($remoteSource) { */ public function maybeInitDebugBar() { if ( class_exists('Debug_Bar', false) && file_exists(dirname(__FILE__) . '/DebugBar') ) { - $this->createDebugBarExtension(); + $this->debugBarExtension = $this->createDebugBarExtension(); } } protected function createDebugBarExtension() { - return new Puc_v4p8_DebugBar_Extension($this); + return new Puc_v4p13_DebugBar_Extension($this); } /** * Display additional configuration details in the Debug Bar panel. * - * @param Puc_v4p8_DebugBar_Panel $panel + * @param Puc_v4p13_DebugBar_Panel $panel */ public function onDisplayConfiguration($panel) { //Do nothing. Subclasses can use this to add additional info to the panel. diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/UpgraderStatus.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/UpgraderStatus.php similarity index 98% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/UpgraderStatus.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/UpgraderStatus.php index f1eeef5..9f12322 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/UpgraderStatus.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/UpgraderStatus.php @@ -1,5 +1,5 @@ getStableTag($configBranch); //Look for version-like tags. - if ( !$updateSource && ($configBranch === 'master') ) { + if ( !$updateSource && ($configBranch === 'master' || $configBranch === 'main') ) { $updateSource = $this->getLatestTag(); } //If all else fails, use the specified branch itself. @@ -59,8 +59,16 @@ public function getBranch($branchName) { return null; } - return new Puc_v4p8_Vcs_Reference(array( - 'name' => $branch->name, + //The "/src/{stuff}/{path}" endpoint doesn't seem to handle branch names that contain slashes. + //If we don't encode the slash, we get a 404. If we encode it as "%2F", we get a 401. + //To avoid issues, if the branch name is not URL-safe, let's use the commit hash instead. + $ref = $branch->name; + if ((urlencode($ref) !== $ref) && isset($branch->target->hash)) { + $ref = $branch->target->hash; + } + + return new Puc_v4p13_Vcs_Reference(array( + 'name' => $ref, 'updated' => $branch->target->date, 'downloadUrl' => $this->getDownloadUrl($branch->name), )); @@ -70,7 +78,7 @@ public function getBranch($branchName) { * Get a specific tag. * * @param string $tagName - * @return Puc_v4p8_Vcs_Reference|null + * @return Puc_v4p13_Vcs_Reference|null */ public function getTag($tagName) { $tag = $this->api('/refs/tags/' . $tagName); @@ -78,7 +86,7 @@ public function getTag($tagName) { return null; } - return new Puc_v4p8_Vcs_Reference(array( + return new Puc_v4p13_Vcs_Reference(array( 'name' => $tag->name, 'version' => ltrim($tag->name, 'v'), 'updated' => $tag->target->date, @@ -89,7 +97,7 @@ public function getTag($tagName) { /** * Get the tag that looks like the highest version number. * - * @return Puc_v4p8_Vcs_Reference|null + * @return Puc_v4p13_Vcs_Reference|null */ public function getLatestTag() { $tags = $this->api('/refs/tags?sort=-target.date'); @@ -103,7 +111,7 @@ public function getLatestTag() { //Return the first result. if ( !empty($versionTags) ) { $tag = $versionTags[0]; - return new Puc_v4p8_Vcs_Reference(array( + return new Puc_v4p13_Vcs_Reference(array( 'name' => $tag->name, 'version' => ltrim($tag->name, 'v'), 'updated' => $tag->target->date, @@ -117,7 +125,7 @@ public function getLatestTag() { * Get the tag/ref specified by the "Stable tag" header in the readme.txt of a given branch. * * @param string $branch - * @return null|Puc_v4p8_Vcs_Reference + * @return null|Puc_v4p13_Vcs_Reference */ protected function getStableTag($branch) { $remoteReadme = $this->getRemoteReadme($branch); @@ -187,7 +195,7 @@ public function getLatestCommitTime($ref) { */ public function api($url, $version = '2.0') { $url = ltrim($url, '/'); - $isSrcResource = Puc_v4p8_Utils::startsWith($url, 'src/'); + $isSrcResource = Puc_v4p13_Utils::startsWith($url, 'src/'); $url = implode('/', array( 'https://api.bitbucket.org', @@ -242,7 +250,7 @@ public function setAuthentication($credentials) { parent::setAuthentication($credentials); if ( !empty($credentials) && !empty($credentials['consumer_key']) ) { - $this->oauth = new Puc_v4p8_OAuthSignature( + $this->oauth = new Puc_v4p13_OAuthSignature( $credentials['consumer_key'], $credentials['consumer_secret'] ); diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/GitHubApi.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/GitHubApi.php similarity index 79% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/GitHubApi.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/GitHubApi.php index 519d41d..0fb0b05 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/GitHubApi.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/GitHubApi.php @@ -1,8 +1,8 @@ api('/repos/:user/:repo/releases/latest'); @@ -65,10 +65,10 @@ public function getLatestRelease() { return null; } - $reference = new Puc_v4p8_Vcs_Reference(array( + $reference = new Puc_v4p13_Vcs_Reference(array( 'name' => $release->tag_name, 'version' => ltrim($release->tag_name, 'v'), //Remove the "v" prefix from "v1.2.3". - 'downloadUrl' => $this->signDownloadUrl($release->zipball_url), + 'downloadUrl' => $release->zipball_url, 'updated' => $release->created_at, 'apiResponse' => $release, )); @@ -84,9 +84,10 @@ public function getLatestRelease() { if ( $this->isAuthenticationEnabled() ) { /** * Keep in mind that we'll need to add an "Accept" header to download this asset. - * @see setReleaseDownloadHeader() + * + * @see setUpdateDownloadHeaders() */ - $reference->downloadUrl = $this->signDownloadUrl($matchingAssets[0]->url); + $reference->downloadUrl = $matchingAssets[0]->url; } else { //It seems that browser_download_url only works for public repositories. //Using an access_token doesn't help. Maybe OAuth would work? @@ -108,7 +109,7 @@ public function getLatestRelease() { /** * Get the tag that looks like the highest version number. * - * @return Puc_v4p8_Vcs_Reference|null + * @return Puc_v4p13_Vcs_Reference|null */ public function getLatestTag() { $tags = $this->api('/repos/:user/:repo/tags'); @@ -123,10 +124,10 @@ public function getLatestTag() { } $tag = $versionTags[0]; - return new Puc_v4p8_Vcs_Reference(array( + return new Puc_v4p13_Vcs_Reference(array( 'name' => $tag->name, 'version' => ltrim($tag->name, 'v'), - 'downloadUrl' => $this->signDownloadUrl($tag->zipball_url), + 'downloadUrl' => $tag->zipball_url, 'apiResponse' => $tag, )); } @@ -135,7 +136,7 @@ public function getLatestTag() { * Get a branch by name. * * @param string $branchName - * @return null|Puc_v4p8_Vcs_Reference + * @return null|Puc_v4p13_Vcs_Reference */ public function getBranch($branchName) { $branch = $this->api('/repos/:user/:repo/branches/' . $branchName); @@ -143,7 +144,7 @@ public function getBranch($branchName) { return null; } - $reference = new Puc_v4p8_Vcs_Reference(array( + $reference = new Puc_v4p13_Vcs_Reference(array( 'name' => $branch->name, 'downloadUrl' => $this->buildArchiveDownloadUrl($branch->name), 'apiResponse' => $branch, @@ -203,6 +204,10 @@ protected function api($url, $queryParams = array()) { $url = $this->buildApiUrl($url, $queryParams); $options = array('timeout' => 10); + if ( $this->isAuthenticationEnabled() ) { + $options['headers'] = array('Authorization' => $this->getAuthorizationHeader()); + } + if ( !empty($this->httpFilterName) ) { $options = apply_filters($this->httpFilterName, $options); } @@ -245,9 +250,6 @@ protected function buildApiUrl($url, $queryParams) { } $url = 'https://api.github.com' . $url; - if ( !empty($this->accessToken) ) { - $queryParams['access_token'] = $this->accessToken; - } if ( !empty($queryParams) ) { $url = add_query_arg($queryParams, $url); } @@ -285,9 +287,6 @@ public function buildArchiveDownloadUrl($ref = 'master') { urlencode($this->repositoryName), urlencode($ref) ); - if ( !empty($this->accessToken) ) { - $url = $this->signDownloadUrl($url); - } return $url; } @@ -305,13 +304,17 @@ public function getTag($tagName) { public function setAuthentication($credentials) { parent::setAuthentication($credentials); $this->accessToken = is_string($credentials) ? $credentials : null; + + //Optimization: Instead of filtering all HTTP requests, let's do it only when + //WordPress is about to download an update. + add_filter('upgrader_pre_download', array($this, 'addHttpRequestFilter'), 10, 1); //WP 3.7+ } /** * Figure out which reference (i.e tag or branch) contains the latest version. * * @param string $configBranch Start looking in this branch. - * @return null|Puc_v4p8_Vcs_Reference + * @return null|Puc_v4p13_Vcs_Reference */ public function chooseReference($configBranch) { $updateSource = null; @@ -332,17 +335,6 @@ public function chooseReference($configBranch) { return $updateSource; } - /** - * @param string $url - * @return string - */ - public function signDownloadUrl($url) { - if ( empty($this->credentials) ) { - return $url; - } - return add_query_arg('access_token', $this->credentials, $url); - } - /** * Enable updating via release assets. * @@ -361,10 +353,6 @@ public function enableReleaseAssets($fileNameRegex = null) { $this->userName, $this->repositoryName ); - - //Optimization: Instead of filtering all HTTP requests, let's do it only when - //WordPress is about to download an update. - add_filter('upgrader_pre_download', array($this, 'addHttpRequestFilter'), 10, 1); //WP 3.7+ } /** @@ -387,31 +375,67 @@ protected function matchesAssetFilter($releaseAsset) { * @return bool */ public function addHttpRequestFilter($result) { - if ( $this->releaseAssetsEnabled && !$this->downloadFilterAdded && $this->isAuthenticationEnabled() ) { - add_filter('http_request_args', array($this, 'setReleaseDownloadHeader'), 10, 2); + if ( !$this->downloadFilterAdded && $this->isAuthenticationEnabled() ) { + add_filter('http_request_args', array($this, 'setUpdateDownloadHeaders'), 10, 2); + add_action('requests-requests.before_redirect', array($this, 'removeAuthHeaderFromRedirects'), 10, 4); $this->downloadFilterAdded = true; } return $result; } /** - * Set the HTTP header that's necessary to download private release assets. + * Set the HTTP headers that are necessary to download updates from private repositories. * * See GitHub docs: * @link https://developer.github.com/v3/repos/releases/#get-a-single-release-asset + * @link https://developer.github.com/v3/auth/#basic-authentication * * @internal * @param array $requestArgs * @param string $url * @return array */ - public function setReleaseDownloadHeader($requestArgs, $url = '') { - //Is WordPress trying to download one of our assets? - if ( strpos($url, $this->assetApiBaseUrl) !== false ) { - $requestArgs['headers']['accept'] = 'application/octet-stream'; + public function setUpdateDownloadHeaders($requestArgs, $url = '') { + //Is WordPress trying to download one of our release assets? + if ( $this->releaseAssetsEnabled && (strpos($url, $this->assetApiBaseUrl) !== false) ) { + $requestArgs['headers']['Accept'] = 'application/octet-stream'; + } + //Use Basic authentication, but only if the download is from our repository. + $repoApiBaseUrl = $this->buildApiUrl('/repos/:user/:repo/', array()); + if ( $this->isAuthenticationEnabled() && (strpos($url, $repoApiBaseUrl)) === 0 ) { + $requestArgs['headers']['Authorization'] = $this->getAuthorizationHeader(); } return $requestArgs; } + + /** + * When following a redirect, the Requests library will automatically forward + * the authorization header to other hosts. We don't want that because it breaks + * AWS downloads and can leak authorization information. + * + * @internal + * @param string $location + * @param array $headers + */ + public function removeAuthHeaderFromRedirects(&$location, &$headers) { + $repoApiBaseUrl = $this->buildApiUrl('/repos/:user/:repo/', array()); + if ( strpos($location, $repoApiBaseUrl) === 0 ) { + return; //This request is going to GitHub, so it's fine. + } + //Remove the header. + if ( isset($headers['Authorization']) ) { + unset($headers['Authorization']); + } + } + + /** + * Generate the value of the "Authorization" header. + * + * @return string + */ + protected function getAuthorizationHeader() { + return 'Basic ' . base64_encode($this->userName . ':' . $this->accessToken); + } } endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/GitLabApi.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/GitLabApi.php similarity index 70% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/GitLabApi.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/GitLabApi.php index 86fac42..cd90ec2 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/GitLabApi.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/GitLabApi.php @@ -1,8 +1,8 @@ getLatestTag(); - } + $releases = $this->api('/:id/releases'); + if ( is_wp_error($releases) || empty($releases) || !is_array($releases) ) { + return null; + } + + foreach ($releases as $release) { + if ( true !== $release->upcoming_release ) { + break 1; //Break the loop on the first release we find that isn't an upcoming release + } + } + if ( is_wp_error($release) || !is_object($release) || !isset($release->tag_name) ) { + return null; + } + + $reference = new Puc_v4p13_Vcs_Reference(array( + 'name' => $release->tag_name, + 'version' => ltrim($release->tag_name, 'v'), //Remove the "v" prefix from "v1.2.3". + 'downloadUrl' => '', + 'updated' => $release->released_at, + 'apiResponse' => $release, + )); + $download_url = false; + + if ( $this->releasePackageEnabled && isset($release->assets, $release->assets->links) ) { + /** + * Use the first asset LINK that is a zip format file generated by a Gitlab Release Pipeline + * + * @link https://gist.github.com/timwiel/9dfd3526c768efad4973254085e065ce + */ + foreach ($release->assets->links as $link) { + //TODO: Check the "format" property instead of the URL suffix. + if ( 'zip' === substr($link->url, -3) ) { + $download_url = $link->url; + break 1; + } + } + if ( empty( $download_url ) ) { + return null; + } + if ( ! empty( $this->accessToken ) ) { + $download_url = add_query_arg('private_token', $this->accessToken, $download_url); + } + $reference->downloadUrl = $download_url; + return $reference; + + } elseif ( isset($release->assets) ) { + /** + * Use the first asset SOURCE file that is a zip format from a Gitlab Release which should be a zip file + */ + foreach ($release->assets->sources as $source) { + if ( 'zip' === $source->format ) { + $download_url = $source->url; + break 1; + } + } + if ( empty( $download_url ) ) { + return null; + } + if ( ! empty( $this->accessToken ) ) { + $download_url = add_query_arg('private_token', $this->accessToken, $download_url); + } + $reference->downloadUrl = $download_url; + return $reference; + + } + + //If we get this far without a return then obviosuly noi release download urls were found + return null; + } /** * Get the tag that looks like the highest version number. * - * @return Puc_v4p8_Vcs_Reference|null + * @return Puc_v4p13_Vcs_Reference|null */ public function getLatestTag() { $tags = $this->api('/:id/repository/tags'); @@ -114,7 +191,7 @@ public function getLatestTag() { } $tag = $versionTags[0]; - return new Puc_v4p8_Vcs_Reference(array( + return new Puc_v4p13_Vcs_Reference(array( 'name' => $tag->name, 'version' => ltrim($tag->name, 'v'), 'downloadUrl' => $this->buildArchiveDownloadUrl($tag->name), @@ -126,7 +203,7 @@ public function getLatestTag() { * Get a branch by name. * * @param string $branchName - * @return null|Puc_v4p8_Vcs_Reference + * @return null|Puc_v4p13_Vcs_Reference */ public function getBranch($branchName) { $branch = $this->api('/:id/repository/branches/' . $branchName); @@ -134,7 +211,7 @@ public function getBranch($branchName) { return null; } - $reference = new Puc_v4p8_Vcs_Reference(array( + $reference = new Puc_v4p13_Vcs_Reference(array( 'name' => $branch->name, 'downloadUrl' => $this->buildArchiveDownloadUrl($branch->name), 'apiResponse' => $branch, @@ -283,16 +360,19 @@ public function getTag($tagName) { * Figure out which reference (i.e tag or branch) contains the latest version. * * @param string $configBranch Start looking in this branch. - * @return null|Puc_v4p8_Vcs_Reference + * @return null|Puc_v4p13_Vcs_Reference */ public function chooseReference($configBranch) { - $updateSource = null; - // GitLab doesn't handle releases the same as GitHub so just use the latest tag - if ( $configBranch === 'master' ) { - $updateSource = $this->getLatestTag(); + if ( $configBranch === 'main' || $configBranch === 'master' ) { + //Use the latest release. + $updateSource = $this->getLatestRelease(); + if ( $updateSource === null ) { + //Failing that, use the tag with the highest version number. + $updateSource = $this->getLatestTag(); + } } - + //Alternatively, just use the branch itself. if ( empty($updateSource) ) { $updateSource = $this->getBranch($configBranch); } @@ -304,6 +384,17 @@ public function setAuthentication($credentials) { parent::setAuthentication($credentials); $this->accessToken = is_string($credentials) ? $credentials : null; } + + public function enableReleaseAssets() { + $this->releaseAssetsEnabled = true; + $this->releasePackageEnabled = false; + } + + public function enableReleasePackages() { + $this->releaseAssetsEnabled = false; + $this->releasePackageEnabled = true; + } + } endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/PluginUpdateChecker.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/PluginUpdateChecker.php similarity index 67% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/PluginUpdateChecker.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/PluginUpdateChecker.php index 85dfbb8..33d9142 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/PluginUpdateChecker.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/PluginUpdateChecker.php @@ -1,21 +1,21 @@ api; $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath()); - $info = new Puc_v4p8_Plugin_Info(); + $info = new Puc_v4p13_Plugin_Info(); $info->filename = $this->pluginFile; $info->slug = $this->slug; $this->setInfoFromHeader($this->package->getPluginHeader(), $info); + $this->setIconsFromLocalAssets($info); + $this->setBannersFromLocalAssets($info); //Pick a branch or tag. $updateSource = $api->chooseReference($this->branch); @@ -124,7 +126,7 @@ protected function readmeTxtExistsLocally() { * Copy plugin metadata from a file header to a Plugin Info object. * * @param array $fileHeader - * @param Puc_v4p8_Plugin_Info $pluginInfo + * @param Puc_v4p13_Plugin_Info $pluginInfo */ protected function setInfoFromHeader($fileHeader, $pluginInfo) { $headerToPropertyMap = array( @@ -139,6 +141,8 @@ protected function setInfoFromHeader($fileHeader, $pluginInfo) { 'Tested WP' => 'tested', 'Requires at least' => 'requires', 'Tested up to' => 'tested', + + 'Requires PHP' => 'requires_php', ); foreach ($headerToPropertyMap as $headerName => $property) { if ( isset($fileHeader[$headerName]) && !empty($fileHeader[$headerName]) ) { @@ -155,7 +159,7 @@ protected function setInfoFromHeader($fileHeader, $pluginInfo) { * Copy plugin metadata from the remote readme.txt file. * * @param string $ref GitHub tag or branch where to look for the readme. - * @param Puc_v4p8_Plugin_Info $pluginInfo + * @param Puc_v4p13_Plugin_Info $pluginInfo */ protected function setInfoFromRemoteReadme($ref, $pluginInfo) { $readme = $this->api->getRemoteReadme($ref); @@ -172,12 +176,88 @@ protected function setInfoFromRemoteReadme($ref, $pluginInfo) { if ( !empty($readme['requires_at_least']) ) { $pluginInfo->requires = $readme['requires_at_least']; } + if ( !empty($readme['requires_php']) ) { + $pluginInfo->requires_php = $readme['requires_php']; + } if ( isset($readme['upgrade_notice'], $readme['upgrade_notice'][$pluginInfo->version]) ) { $pluginInfo->upgrade_notice = $readme['upgrade_notice'][$pluginInfo->version]; } } + /** + * Add icons from the currently installed version to a Plugin Info object. + * + * The icons should be in a subdirectory named "assets". Supported image formats + * and file names are described here: + * @link https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-icons + * + * @param Puc_v4p13_Plugin_Info $pluginInfo + */ + protected function setIconsFromLocalAssets($pluginInfo) { + $icons = $this->getLocalAssetUrls(array( + 'icon.svg' => 'svg', + 'icon-256x256.png' => '2x', + 'icon-256x256.jpg' => '2x', + 'icon-128x128.png' => '1x', + 'icon-128x128.jpg' => '1x', + )); + + if ( !empty($icons) ) { + //The "default" key seems to be used only as last-resort fallback in WP core (5.8/5.9), + //but we'll set it anyway in case some code somewhere needs it. + reset($icons); + $firstKey = key($icons); + $icons['default'] = $icons[$firstKey]; + + $pluginInfo->icons = $icons; + } + } + + /** + * Add banners from the currently installed version to a Plugin Info object. + * + * The banners should be in a subdirectory named "assets". Supported image formats + * and file names are described here: + * @link https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-headers + * + * @param Puc_v4p13_Plugin_Info $pluginInfo + */ + protected function setBannersFromLocalAssets($pluginInfo) { + $banners = $this->getLocalAssetUrls(array( + 'banner-772x250.png' => 'high', + 'banner-772x250.jpg' => 'high', + 'banner-1544x500.png' => 'low', + 'banner-1544x500.jpg' => 'low', + )); + + if ( !empty($banners) ) { + $pluginInfo->banners = $banners; + } + } + + /** + * @param array $filesToKeys + * @return array + */ + protected function getLocalAssetUrls($filesToKeys) { + $assetDirectory = $this->package->getAbsoluteDirectoryPath() . DIRECTORY_SEPARATOR . 'assets'; + if ( !is_dir($assetDirectory) ) { + return array(); + } + $assetBaseUrl = trailingslashit(plugins_url('', $assetDirectory . '/imaginary.file')); + + $foundAssets = array(); + foreach ($filesToKeys as $fileName => $key) { + $fullBannerPath = $assetDirectory . DIRECTORY_SEPARATOR . $fileName; + if ( !isset($icons[$key]) && is_file($fullBannerPath) ) { + $foundAssets[$key] = $assetBaseUrl . $fileName; + } + } + + return $foundAssets; + } + public function setBranch($branch) { $this->branch = $branch; return $this; diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/Reference.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/Reference.php similarity index 91% rename from vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/Reference.php rename to vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/Reference.php index 99feb98..9251165 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Vcs/Reference.php +++ b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p13/Vcs/Reference.php @@ -1,5 +1,5 @@ api; $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath()); - $update = new Puc_v4p8_Theme_Update(); + $update = new Puc_v4p13_Theme_Update(); $update->slug = $this->slug; //Figure out which reference (tag or branch) we'll use to get the latest version of the theme. @@ -60,13 +60,13 @@ public function requestUpdate() { //Get headers from the main stylesheet in this branch/tag. Its "Version" header and other metadata //are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags. $remoteHeader = $this->package->getFileHeader($api->getRemoteFile('style.css', $ref)); - $update->version = Puc_v4p8_Utils::findNotEmpty(array( + $update->version = Puc_v4p13_Utils::findNotEmpty(array( $remoteHeader['Version'], - Puc_v4p8_Utils::get($updateSource, 'version'), + Puc_v4p13_Utils::get($updateSource, 'version'), )); //The details URL defaults to the Theme URI header or the repository URL. - $update->details_url = Puc_v4p8_Utils::findNotEmpty(array( + $update->details_url = Puc_v4p13_Utils::findNotEmpty(array( $remoteHeader['ThemeURI'], $this->package->getHeaderValue('ThemeURI'), $this->metadataUrl, diff --git a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Autoloader.php b/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Autoloader.php deleted file mode 100644 index e1c3d3d..0000000 --- a/vendor/yahnis-elsts/plugin-update-checker/Puc/v4p8/Autoloader.php +++ /dev/null @@ -1,47 +0,0 @@ -rootDir = dirname(__FILE__) . '/'; - $nameParts = explode('_', __CLASS__, 3); - $this->prefix = $nameParts[0] . '_' . $nameParts[1] . '_'; - - $this->libraryDir = realpath($this->rootDir . '../..') . '/'; - $this->staticMap = array( - 'PucReadmeParser' => 'vendor/PucReadmeParser.php', - 'Parsedown' => 'vendor/Parsedown.php', - 'Puc_v4_Factory' => 'Puc/v4/Factory.php', - ); - - spl_autoload_register(array($this, 'autoload')); - } - - public function autoload($className) { - if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) { - /** @noinspection PhpIncludeInspection */ - include ($this->libraryDir . $this->staticMap[$className]); - return; - } - - if (strpos($className, $this->prefix) === 0) { - $path = substr($className, strlen($this->prefix)); - $path = str_replace('_', '/', $path); - $path = $this->rootDir . $path . '.php'; - - if (file_exists($path)) { - /** @noinspection PhpIncludeInspection */ - include $path; - } - } - } - } - -endif; diff --git a/vendor/yahnis-elsts/plugin-update-checker/README.md b/vendor/yahnis-elsts/plugin-update-checker/README.md index 697bbb3..469564f 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/README.md +++ b/vendor/yahnis-elsts/plugin-update-checker/README.md @@ -19,7 +19,7 @@ From the users' perspective, it works just like with plugins and themes hosted o - [BitBucket Integration](#bitbucket-integration) - [How to Release an Update](#how-to-release-an-update-2) - [GitLab Integration](#gitlab-integration) - - [How to Release an Update](#how-to-release-an-update-3) + - [How to Release a GitLab Update](#how-to-release-a-gitlab-update) - [License Management](#license-management) - [Resources](#resources) @@ -28,6 +28,8 @@ From the users' perspective, it works just like with plugins and themes hosted o Getting Started --------------- +*Note:* In each of the below examples, part of the instructions are to create an instance of the update checker class. It's recommended to do this either during the `plugins_loaded` action or outside of any hooks. If you do it only during an `admin_*` action, then updates will not be visible to a wide variety of WordPress maanagement tools; they will only be visible to logged-in users on dashboard pages. + ### Self-hosted Plugins and Themes 1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest) and copy the `plugin-update-checker` directory to your plugin or theme. @@ -99,12 +101,12 @@ By default, the library will check the specified URL for changes every 12 hours. __FILE__, 'unique-plugin-or-theme-slug' ); + + //Set the branch that contains the stable release. + $myUpdateChecker->setBranch('stable-branch-name'); //Optional: If you're using a private repository, specify the access token like this: $myUpdateChecker->setAuthentication('your-token-here'); - - //Optional: Set the branch that contains the stable release. - $myUpdateChecker->setBranch('stable-branch-name'); ``` 3. Plugins only: Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/readme.txt) to your repository. The contents of this file will be shown when the user clicks the "View version 1.2.3 details" link. @@ -225,7 +227,7 @@ BitBucket doesn't have an equivalent to GitHub's releases, so the process is sli ### GitLab Integration 1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest) and copy the `plugin-update-checker` directory to your plugin or theme. -2. Add the following code to the main plugin file or `functions.php`: +2. Add the following code to the main plugin file or `functions.php` and define how you want to check for updates from Gitlab (refer to: [Gitlab: How to Release an Update](#how-to-release-a-gitlab-update)): ```php require 'plugin-update-checker/plugin-update-checker.php'; @@ -237,15 +239,12 @@ BitBucket doesn't have an equivalent to GitHub's releases, so the process is sli //Optional: If you're using a private repository, specify the access token like this: $myUpdateChecker->setAuthentication('your-token-here'); - - //Optional: Set the branch that contains the stable release. - $myUpdateChecker->setBranch('stable-branch-name'); ``` - + Alternatively, if you're using a self-hosted GitLab instance, initialize the update checker like this: ```php - $myUpdateChecker = new Puc_v4p8_Vcs_PluginUpdateChecker( - new Puc_v4p8_Vcs_GitLabApi('https://myserver.com/user-name/repo-name/'), + $myUpdateChecker = new Puc_v4p13_Vcs_PluginUpdateChecker( + new Puc_v4p13_Vcs_GitLabApi('https://myserver.com/user-name/repo-name/'), __FILE__, 'unique-plugin-or-theme-slug' ); @@ -253,46 +252,75 @@ BitBucket doesn't have an equivalent to GitHub's releases, so the process is sli ``` If you're using a self-hosted GitLab instance and [subgroups or nested groups](https://docs.gitlab.com/ce/user/group/subgroups/index.html), you have to tell the update checker which parts of the URL are subgroups: ```php - $myUpdateChecker = new Puc_v4p8_Vcs_PluginUpdateChecker( - new Puc_v4p8_Vcs_GitLabApi('https://myserver.com/group-name/subgroup-level1/subgroup-level2/subgroup-level3/repo-name/', null, 'subgroup-level1/subgroup-level2/subgroup-level3'), + $myUpdateChecker = new Puc_v4p13_Vcs_PluginUpdateChecker( + new Puc_v4p13_Vcs_GitLabApi('https://myserver.com/group-name/subgroup-level1/subgroup-level2/subgroup-level3/repo-name/', null, 'subgroup-level1/subgroup-level2/subgroup-level3'), __FILE__, 'unique-plugin-or-theme-slug' ); - + ``` - + 3. Plugins only: Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/readme.txt) to your repository. The contents of this file will be shown when the user clicks the "View version 1.2.3 details" link. -#### How to Release an Update +#### How to Release a GitLab Update +A Gitlab repository can be checked for updates in 4 different ways. -GitLab doesn't have an equivalent to GitHub's releases, so the process is slightly different. You can use any of the following approaches: - -- **Tags** - - To release version 1.2.3, create a new Git tag named `v1.2.3` or `1.2.3`. That's it. - - PUC doesn't require strict adherence to [SemVer](http://semver.org/). These are all valid tag names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5`. However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead. - -- **Stable branch** - - Point the update checker at a stable, production-ready branch: - ```php - $updateChecker->setBranch('branch-name'); - ``` - PUC will periodically check the `Version` header in the main plugin file or `style.css` and display a notification if it's greater than the installed version. - - Caveat: If you set the branch to `master` (the default), the update checker will look for recent releases and tags first. It'll only use the `master` branch if it doesn't find anything else suitable. +1. **Stable branch** (other than `master` or `main`): + - Point the update checker at any stable, production-ready branch and PUC will periodically check the `Version` header in the main plugin file or `style.css` and display a notification if it's greater than the installed version. + - Add the following code: + ```php + //Add the following code to your main plugin file or `functions.php` file to check for updates from a custom branch + $myUpdateChecker->setBranch('stable-branch-name'); + ``` + - Caveats: + - If you set the branch to `main` (the default) or `master` (the historical default), the update checker will look for recent releases and tags first. It'll only use the `main` or `master` branch if it doesn't find anything else suitable. + +2. **GitLab Releases using Generic Packages**: + - Use a Gitlab CI/CD Pipeline to automatically generate your update on release using a Generic Package. The benefit of using Generic Package assets over the Source Code assets is that the code can already be built and production ready. + - Add the following code: + ```php + //Add the following code to your main plugin file or `functions.php` file to check for a new update from releases using generic packages + $myUpdateChecker->getVcsApi()->enableReleasePackages(); + ``` + - PUC will periodically check the release version (i.e. the tag name of the release) and will display a notification if the release is a greater version than the installed version. + - The release tag name should loosely follow [SemVer](http://semver.org/) but these are all valid release names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5` However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead. + - For more information about *Gitlab Release Generic Packages* refer to the following links: + - [Gitlab CI/CD Release Documentation](https://docs.gitlab.com/ee/user/project/releases/#create-release-from-gitlab-ci) + - [Gitlab Release Assets as Generic Package Documentation](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs/examples/release-assets-as-generic-package/) + - [Example .gitlab-ci.yml file using Release Generic Packages for generating a update package from the Sensei-LMS wordpress plugin](https://gist.github.com/timwiel/9dfd3526c768efad4973254085e065ce) + + +3. **GitLab Releases using Source Code Assets**: + - Create a new release using the "Releases" feature on Gitlab. + - Add the following code: + ```php + //Add the following code to your main plugin file or `functions.php` file to check for a new update from releases using release assets + $myUpdateChecker->getVcsApi()->enableReleaseAssets(); + ``` + - PUC will periodically check the release version (based on release tag name) and display a notification if the release version is greater than the installed version. + - The release name should loosely follow [SemVer](http://semver.org/) but these are all valid release names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5` However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead. + + +4. **Tags** (this is the default option): + - To release version 1.2.3, create a new Git tag named `v1.2.3` or `1.2.3`. + - Optionally, add the following code: + ```php + //Add the following code to your main plugin file or `functions.php` file to check for updates from the default branch + $myUpdateChecker->setBranch('master'); //or 'main' + ``` + - PUC doesn't require strict adherence to [SemVer](http://semver.org/). These are all valid tag names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5`. However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead. License Management ------------------ -Currently, the update checker doesn't have any built-in license management features. It only provides some hooks that you can use to, for example, append license keys to update requests (`$updateChecker->addQueryArgFilter()`). If you're looking for ways to manage and verify licenses, please post your feedback in [this issue](https://github.com/YahnisElsts/plugin-update-checker/issues/222). +Currently, the update checker doesn't have any built-in license management features. It only provides some hooks that you can use to, for example, append license keys to update requests (`$updateChecker->addQueryArgFilter()`). If you're looking for ways to manage and verify licenses, please post your feedback in [this issue](https://github.com/YahnisElsts/plugin-update-checker/issues/222). Resources --------- - [This blog post](http://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/) has more information about the update checker API. *Slightly out of date.* - [Debug Bar](https://wordpress.org/plugins/debug-bar/) - useful for testing and debugging the update checker. +- [Update format reference](https://docs.google.com/spreadsheets/d/1eOBbW7Go2qEQXReOOCdidMTf_tDYRq4JfegcO1CBPIs/edit?usp=sharing) - describes all fields supported by the JSON-based update information format used by the update checker. Only covers plugins. Themes use a similar but more limited format. - [Securing download links](http://w-shadow.com/blog/2013/03/19/plugin-updates-securing-download-links/) - a general overview. - [A GUI for entering download credentials](http://open-tools.net/documentation/tutorial-automatic-updates.html#wordpress) - [Theme Update Checker](http://w-shadow.com/blog/2011/06/02/automatic-updates-for-commercial-themes/) - an older, theme-only variant of this update checker. diff --git a/vendor/yahnis-elsts/plugin-update-checker/composer.json b/vendor/yahnis-elsts/plugin-update-checker/composer.json index 5b91360..7f97a49 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/composer.json +++ b/vendor/yahnis-elsts/plugin-update-checker/composer.json @@ -14,9 +14,10 @@ } ], "require": { - "php": ">=5.2.0" + "php": ">=5.2.0", + "ext-json": "*" }, "autoload": { - "files": ["load-v4p8.php"] + "files": ["load-v4p13.php"] } } diff --git a/vendor/yahnis-elsts/plugin-update-checker/js/debug-bar.js b/vendor/yahnis-elsts/plugin-update-checker/js/debug-bar.js index b8435db..2452c02 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/js/debug-bar.js +++ b/vendor/yahnis-elsts/plugin-update-checker/js/debug-bar.js @@ -20,12 +20,12 @@ jQuery(function($) { ); } - $('.puc-debug-bar-panel-v4 input[name="puc-check-now-button"]').click(function() { + $('.puc-debug-bar-panel-v4 input[name="puc-check-now-button"]').on('click', function() { runAjaxAction(this, 'puc_v4_debug_check_now'); return false; }); - $('.puc-debug-bar-panel-v4 input[name="puc-request-info-button"]').click(function() { + $('.puc-debug-bar-panel-v4 input[name="puc-request-info-button"]').on('click', function() { runAjaxAction(this, 'puc_v4_debug_request_info'); return false; }); diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_AR.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_AR.mo new file mode 100644 index 0000000..85afecd Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_AR.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_AR.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_AR.po new file mode 100644 index 0000000..80b1c1a --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_AR.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:13-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CL.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CL.mo new file mode 100644 index 0000000..de9c752 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CL.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CL.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CL.po new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CL.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:14-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CO.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CO.mo new file mode 100644 index 0000000..de9c752 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CO.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CO.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CO.po new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CO.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:14-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CR.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CR.mo new file mode 100644 index 0000000..de9c752 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CR.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CR.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CR.po new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_CR.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:14-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_DO.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_DO.mo new file mode 100644 index 0000000..de9c752 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_DO.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_DO.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_DO.po new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_DO.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:14-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.mo index 42e94ab..1cf71f4 100644 Binary files a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.mo and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.po index 0aea312..c404f91 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.po +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_ES.po @@ -2,12 +2,12 @@ msgid "" msgstr "" "Project-Id-Version: plugin-update-checker\n" "POT-Creation-Date: 2017-11-24 17:02+0200\n" -"PO-Revision-Date: 2019-09-25 18:17+0200\n" +"PO-Revision-Date: 2020-03-21 14:56-0400\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.3\n" +"X-Generator: Poedit 2.3\n" "X-Poedit-Basepath: ..\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: UTF-8\n" @@ -41,8 +41,8 @@ msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." #: Puc/v4p3/Plugin/UpdateChecker.php:558 #, php-format msgid "Unknown update checker status \"%s\"" -msgstr "Estado del comprobador de actualización desconocido \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 msgid "There is no changelog available." -msgstr "No hay registro de cambios disponible." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_GT.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_GT.mo new file mode 100644 index 0000000..de9c752 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_GT.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_GT.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_GT.po new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_GT.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:14-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_HN.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_HN.mo new file mode 100644 index 0000000..de9c752 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_HN.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_HN.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_HN.po new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_HN.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:14-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_MX.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_MX.mo new file mode 100644 index 0000000..9ce83f6 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_MX.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_MX.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_MX.po new file mode 100644 index 0000000..0e29c45 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_MX.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 14:57-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PE.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PE.mo new file mode 100644 index 0000000..92c4f34 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PE.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PE.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PE.po new file mode 100644 index 0000000..c0db8e3 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PE.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:15-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PR.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PR.mo new file mode 100644 index 0000000..92c4f34 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PR.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PR.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PR.po new file mode 100644 index 0000000..c0db8e3 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_PR.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:15-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_UY.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_UY.mo new file mode 100644 index 0000000..92c4f34 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_UY.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_UY.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_UY.po new file mode 100644 index 0000000..c0db8e3 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_UY.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 15:15-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_VE.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_VE.mo new file mode 100644 index 0000000..9ce83f6 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_VE.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_VE.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_VE.po new file mode 100644 index 0000000..0e29c45 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-es_VE.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2020-03-21 14:57-0400\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: es_ES\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Comprobar si hay actualizaciones" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "El plugin %s está actualizado." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nueva versión del %s plugin está disponible." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "No se pudo determinar si hay actualizaciones disponibles para %s." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Estado del comprobador de actualización desconocido «%s»" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "No hay un registro de cambios disponible." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.mo index 6a2c57d..4b40d32 100644 Binary files a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.mo and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.po index d894642..db62bb1 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.po +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-it_IT.po @@ -1,38 +1,48 @@ msgid "" msgstr "" "Project-Id-Version: plugin-update-checker\n" -"POT-Creation-Date: 2016-06-29 20:21+0100\n" -"PO-Revision-Date: 2017-01-15 12:24+0100\n" -"Last-Translator: Igor Lückel \n" +"POT-Creation-Date: 2020-08-08 14:36+0300\n" +"PO-Revision-Date: 2022-05-20 00:17+0200\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.5\n" +"X-Generator: Poedit 3.0\n" "X-Poedit-Basepath: ..\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: __;_e\n" -"Language: de_DE\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: d79\n" +"Language: it_IT\n" "X-Poedit-SearchPath-0: .\n" -#: github-checker.php:137 -msgid "There is no changelog available." -msgstr "Non c'è alcuna sezione di aggiornamento disponibile" - -#: plugin-update-checker.php:852 +#: Puc/v4p11/Plugin/Ui.php:128 msgid "Check for updates" msgstr "Verifica aggiornamenti" -#: plugin-update-checker.php:896 -msgid "This plugin is up to date." -msgstr "Il plugin è aggiornato" +#: Puc/v4p11/Plugin/Ui.php:213 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "Il plugin %s è aggiornato." + +#: Puc/v4p11/Plugin/Ui.php:215 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Una nuova versione del plugin %s è disponibile." -#: plugin-update-checker.php:898 -msgid "A new version of this plugin is available." -msgstr "Una nuova versione del plugin è disponibile" +#: Puc/v4p11/Plugin/Ui.php:217 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "Non è possibile verificare se c'è un aggiornamento disponibile per %s." -#: plugin-update-checker.php:900 +#: Puc/v4p11/Plugin/Ui.php:223 #, php-format msgid "Unknown update checker status \"%s\"" -msgstr "Si è verificato un problema sconosciuto \"%s\"" +msgstr "Stato di controllo aggiornamenti sconosciuto \"%s\"" + +#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98 +msgid "There is no changelog available." +msgstr "Non c'è alcun registro delle modifiche disponibile." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo new file mode 100644 index 0000000..50b330e Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-ru_RU.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-ru_RU.po new file mode 100644 index 0000000..33a1199 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-ru_RU.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2020-08-08 14:36+0300\n" +"PO-Revision-Date: 2021-12-20 17:59+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: ru_RU\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p11/Plugin/Ui.php:128 +msgid "Check for updates" +msgstr "Проверить обновления" + +#: Puc/v4p11/Plugin/Ui.php:213 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "Плагин %s обновлён." + +#: Puc/v4p11/Plugin/Ui.php:215 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Новая версия %s доступна." + +#: Puc/v4p11/Plugin/Ui.php:217 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "Не удалось определить, доступны ли обновления для %s." + +#: Puc/v4p11/Plugin/Ui.php:223 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Неизвестный статус средства проверки обновлений \"%s\"" + +#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98 +msgid "There is no changelog available." +msgstr "Журнал изменений отсутствует." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo new file mode 100644 index 0000000..58be2f9 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-tr_TR.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-tr_TR.po new file mode 100644 index 0000000..ba5e291 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-tr_TR.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"PO-Revision-Date: 2021-11-15 19:07+0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.0\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: Emre Erkan \n" +"Language: tr\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p3/Plugin/UpdateChecker.php:395 +msgid "Check for updates" +msgstr "Güncellemeleri kontrol et" + +#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "%s eklentisi güncel." + +#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "%s eklentisinin yeni bir sürümü mevcut." + +#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "%s için güncelleme olup olmadığı belirlenemedi." + +#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Bilinmeyen güncelleme denetleyicisi durumu \"%s\"" + +#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +msgid "There is no changelog available." +msgstr "Kullanılabilir bir değişiklik yok." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo new file mode 100644 index 0000000..79494e5 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-uk_UA.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-uk_UA.po new file mode 100644 index 0000000..b84b16e --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-uk_UA.po @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2020-08-08 14:36+0300\n" +"PO-Revision-Date: 2021-12-20 17:55+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"Last-Translator: \n" +"Language: uk_UA\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p11/Plugin/Ui.php:128 +msgid "Check for updates" +msgstr "Перевірити оновлення" + +#: Puc/v4p11/Plugin/Ui.php:213 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "Плагін %s оновлено." + +#: Puc/v4p11/Plugin/Ui.php:215 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "Нова версія %s доступна." + +#: Puc/v4p11/Plugin/Ui.php:217 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "Не вдалося визначити, чи доступні оновлення для %s." + +#: Puc/v4p11/Plugin/Ui.php:223 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "Невідомий статус перевірки оновлень \"%s\"" + +#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98 +msgid "There is no changelog available." +msgstr "Немає доступного журналу змін." diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo new file mode 100644 index 0000000..86d1144 Binary files /dev/null and b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo differ diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-zh_CN.po b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-zh_CN.po new file mode 100644 index 0000000..d4f7056 --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker-zh_CN.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Project-Id-Version: plugin-update-checker\n" +"POT-Creation-Date: 2022-01-29 12:09+0800\n" +"PO-Revision-Date: 2022-01-29 12:10+0800\n" +"Last-Translator: Seaton Jiang \n" +"Language-Team: \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.3\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" +"X-Poedit-SearchPath-0: .\n" + +#: Puc/v4p11/Plugin/Ui.php:54 +msgid "View details" +msgstr "查看详情" + +#: Puc/v4p11/Plugin/Ui.php:77 +#, php-format +msgid "More information about %s" +msgstr "%s 的更多信息" + +#: Puc/v4p11/Plugin/Ui.php:128 +msgid "Check for updates" +msgstr "检查更新" + +#: Puc/v4p11/Plugin/Ui.php:214 +#, php-format +msgctxt "the plugin title" +msgid "The %s plugin is up to date." +msgstr "%s 目前是最新版本。" + +#: Puc/v4p11/Plugin/Ui.php:216 +#, php-format +msgctxt "the plugin title" +msgid "A new version of the %s plugin is available." +msgstr "%s 当前有可用的更新。" + +#: Puc/v4p11/Plugin/Ui.php:218 +#, php-format +msgctxt "the plugin title" +msgid "Could not determine if updates are available for %s." +msgstr "%s 无法确定是否有可用的更新。" + +#: Puc/v4p11/Plugin/Ui.php:224 +#, php-format +msgid "Unknown update checker status \"%s\"" +msgstr "未知的更新检查状态:%s" + +#: Puc/v4p11/Vcs/PluginUpdateChecker.php:100 +msgid "There is no changelog available." +msgstr "没有可用的更新日志。" diff --git a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot index 67f4f00..127a489 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot +++ b/vendor/yahnis-elsts/plugin-update-checker/languages/plugin-update-checker.pot @@ -2,48 +2,48 @@ msgid "" msgstr "" "Project-Id-Version: plugin-update-checker\n" -"POT-Creation-Date: 2017-11-24 17:02+0200\n" +"POT-Creation-Date: 2022-07-29 15:34+0300\n" "PO-Revision-Date: 2016-01-10 20:59+0100\n" -"Last-Translator: Tamás András Horváth \n" +"Last-Translator: \n" "Language-Team: \n" "Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.4\n" -"X-Poedit-Basepath: ..\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.1.1\n" +"X-Poedit-Basepath: ..\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n" "X-Poedit-SearchPath-0: .\n" -#: Puc/v4p3/Plugin/UpdateChecker.php:395 +#: Puc/v4p13/Plugin/Ui.php:128 msgid "Check for updates" msgstr "" -#: Puc/v4p3/Plugin/UpdateChecker.php:548 +#: Puc/v4p13/Plugin/Ui.php:214 #, php-format msgctxt "the plugin title" msgid "The %s plugin is up to date." msgstr "" -#: Puc/v4p3/Plugin/UpdateChecker.php:550 +#: Puc/v4p13/Plugin/Ui.php:216 #, php-format msgctxt "the plugin title" msgid "A new version of the %s plugin is available." msgstr "" -#: Puc/v4p3/Plugin/UpdateChecker.php:552 +#: Puc/v4p13/Plugin/Ui.php:218 #, php-format msgctxt "the plugin title" msgid "Could not determine if updates are available for %s." msgstr "" -#: Puc/v4p3/Plugin/UpdateChecker.php:558 +#: Puc/v4p13/Plugin/Ui.php:224 #, php-format msgid "Unknown update checker status \"%s\"" msgstr "" -#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95 +#: Puc/v4p13/Vcs/PluginUpdateChecker.php:100 msgid "There is no changelog available." msgstr "" diff --git a/vendor/yahnis-elsts/plugin-update-checker/load-v4p13.php b/vendor/yahnis-elsts/plugin-update-checker/load-v4p13.php new file mode 100644 index 0000000..8b67c1a --- /dev/null +++ b/vendor/yahnis-elsts/plugin-update-checker/load-v4p13.php @@ -0,0 +1,28 @@ + 'Puc_v4p13_Plugin_UpdateChecker', + 'Theme_UpdateChecker' => 'Puc_v4p13_Theme_UpdateChecker', + + 'Vcs_PluginUpdateChecker' => 'Puc_v4p13_Vcs_PluginUpdateChecker', + 'Vcs_ThemeUpdateChecker' => 'Puc_v4p13_Vcs_ThemeUpdateChecker', + + 'GitHubApi' => 'Puc_v4p13_Vcs_GitHubApi', + 'BitBucketApi' => 'Puc_v4p13_Vcs_BitBucketApi', + 'GitLabApi' => 'Puc_v4p13_Vcs_GitLabApi', + ) + as $pucGeneralClass => $pucVersionedClass +) { + Puc_v4_Factory::addVersion($pucGeneralClass, $pucVersionedClass, '4.13'); + //Also add it to the minor-version factory in case the major-version factory + //was already defined by another, older version of the update checker. + Puc_v4p13_Factory::addVersion($pucGeneralClass, $pucVersionedClass, '4.13'); +} + diff --git a/vendor/yahnis-elsts/plugin-update-checker/load-v4p8.php b/vendor/yahnis-elsts/plugin-update-checker/load-v4p8.php deleted file mode 100644 index 175614f..0000000 --- a/vendor/yahnis-elsts/plugin-update-checker/load-v4p8.php +++ /dev/null @@ -1,28 +0,0 @@ - 'Puc_v4p8_Plugin_UpdateChecker', - 'Theme_UpdateChecker' => 'Puc_v4p8_Theme_UpdateChecker', - - 'Vcs_PluginUpdateChecker' => 'Puc_v4p8_Vcs_PluginUpdateChecker', - 'Vcs_ThemeUpdateChecker' => 'Puc_v4p8_Vcs_ThemeUpdateChecker', - - 'GitHubApi' => 'Puc_v4p8_Vcs_GitHubApi', - 'BitBucketApi' => 'Puc_v4p8_Vcs_BitBucketApi', - 'GitLabApi' => 'Puc_v4p8_Vcs_GitLabApi', - ) - as $pucGeneralClass => $pucVersionedClass -) { - Puc_v4_Factory::addVersion($pucGeneralClass, $pucVersionedClass, '4.8'); - //Also add it to the minor-version factory in case the major-version factory - //was already defined by another, older version of the update checker. - Puc_v4p8_Factory::addVersion($pucGeneralClass, $pucVersionedClass, '4.8'); -} - diff --git a/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php b/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php index 624a01b..da4348f 100644 --- a/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php +++ b/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php @@ -1,10 +1,10 @@ sanitize_text( $_requires_php[1] ); + } else { + $requires_php = null; + } // Stable tag: 10.4-ride-the-fire-eagle-danger-day if ( preg_match('|Stable tag:(.*)|i', $file_contents, $_stable_tag) ) @@ -196,6 +202,7 @@ function parse_readme_contents( $file_contents ) { 'tags' => $tags, 'requires_at_least' => $requires_at_least, 'tested_up_to' => $tested_up_to, + 'requires_php' => $requires_php, 'stable_tag' => $stable_tag, 'contributors' => $contributors, 'donate_link' => $donate_link,